es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Busque las líneas de un archivo que no aparecen (ni siquiera parcialmente) en otro archivo.

Necesito un comando de Unix para encontrar líneas del archivo 1 que no aparezcan en absoluto en el archivo 2.
Por ejemplo –

Archivo 1:

aaa
bbb

Archivo 2:

aaaccc
bb

Salida esperada:

bbb

(“aaa” del archivo 1 aparece en el archivo 2, como parte de una cadena más larga “aaaccc”).

No puedo usar “comm” ya que solo funciona en líneas completas. En este caso, también estoy buscando excluir líneas en el archivo 2 que contengan líneas en el archivo 1 como parte de cadenas más grandes, como se explica anteriormente.

Tenga en cuenta que preferiría una forma rápida si existe, ya que mis archivos son MUY grandes.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Un posible comando de shell de Unix para lograr esto es usar grep y la opción -v (invertir coincidencia):

    grep -v -f archivo2 archivo1
    

    Explicación:

    • grep: buscar en uno o varios archivos líneas que coincidan con un patrón
    • -v: invertir la coincidencia, mostrar líneas que no contengan el patrón
    • -f archivo2: obtener el patrón de archivo2

    Este comando lee archivo1 e imprime todas las líneas que no aparecen en archivo2, incluso como parte de cadenas más grandes. Ten en cuenta que esto supone que las líneas en archivo1 son completas y no contienen caracteres especiales de expresión regular. Si este no es el caso, es posible que debas escaparlos antes de ejecutar el comando.

    En cuanto a la velocidad, grep es generalmente muy rápido y eficiente, especialmente para patrones simples y archivos grandes. Sin embargo, si tus archivos son extremadamente grandes o lentos de leer desde el disco, es posible que debas considerar soluciones paralelas o de streaming, o utilizar herramientas especializadas como awk o sed.

Comments are closed.