ver sintaxis ejemplos contenido comandos comando basicos archivo linux terminal diff file-comparison

sintaxis - Comparando dos archivos en la terminal de linux



comandos shell linux (8)

Aquí está mi solución para esto:

mkdir temp mkdir results cp /usr/share/dict/american-english ~/temp/american-english-dictionary cp /usr/share/dict/british-english ~/temp/british-english-dictionary cat ~/temp/american-english-dictionary | wc -l > ~/results/count-american-english-dictionary cat ~/temp/british-english-dictionary | wc -l > ~/results/count-british-english-dictionary grep -Fxf ~/temp/american-english-dictionary ~/temp/british-english-dictionary > ~/results/common-english grep -Fxvf ~/results/common-english ~/temp/american-english-dictionary > ~/results/unique-american-english grep -Fxvf ~/results/common-english ~/temp/british-english-dictionary > ~/results/unique-british-english

Hay dos archivos llamados "a.txt" y "b.txt" ambos tienen una lista de palabras. Ahora quiero verificar qué palabras son extra en "a.txt" y no están en "b.txt" .

Necesito un algoritmo eficiente ya que necesito comparar dos diccionarios.


Ordene y use comm :

comm -23 <(sort a.txt) <(sort b.txt)

comm compara archivos de entrada (ordenados) y, de forma predeterminada, genera tres columnas: líneas que son exclusivas de a, líneas que son exclusivas de b y líneas que están presentes en ambas. Al especificar -1 , -2 y / o -3 puede suprimir la salida correspondiente. Por lo tanto, comm -23 ab enumera solo las entradas que son exclusivas de a. Utilizo la sintaxis <(...) para ordenar los archivos sobre la marcha, si ya están ordenados, no es necesario.


Prueba sdiff ( man sdiff )

sdiff -s file1 file2


Puede usar la herramienta diff en Linux para comparar dos archivos. Puede usar las opciones --changed-group-format y --unchanged-group-format para filtrar los datos requeridos.

A continuación se pueden usar tres opciones para seleccionar el grupo relevante para cada opción:

  • ''% <'' obtiene líneas de FILE1

  • ''%>'' obtiene líneas de FILE2

  • '''' (cadena vacía) para eliminar líneas de ambos archivos.

Ej: diff --changed-group-format = "% <" --unchanged-group-format = "" archivo1.txt archivo2.txt

[root@vmoracle11 tmp]# cat file1.txt test one test two test three test four test eight [root@vmoracle11 tmp]# cat file2.txt test one test three test nine [root@vmoracle11 tmp]# diff --changed-group-format=''%<'' --unchanged-group-format='''' file1.txt file2.txt test two test four test eight


Si prefiere el estilo de salida diff de git diff , puede usarlo con el indicador --no-index para comparar archivos que no están en un repositorio git:

git diff --no-index a.txt b.txt

Usando un par de archivos con alrededor de 200k cadenas de nombre de archivo en cada uno, comparé (con el comando de time incorporado) este enfoque frente a algunas de las otras respuestas aquí:

git diff --no-index a.txt b.txt # ~1.2s comm -23 <(sort a.txt) <(sort b.txt) # ~0.2s diff a.txt b.txt # ~2.6s sdiff a.txt b.txt # ~2.7s vimdiff a.txt b.txt # ~3.2s

comm parece ser el más rápido con diferencia, mientras que git diff --no-index parece ser el enfoque más rápido para la salida de estilo diff.

Actualización 2018-03-25 En realidad, puede omitir el indicador --no-index menos que esté dentro de un repositorio git y desee comparar los archivos no rastreados dentro de ese repositorio. De las páginas man :

Esta forma es para comparar las dos rutas dadas en el sistema de archivos. Puede omitir la opción --no-index cuando ejecuta el comando en un árbol de trabajo controlado por Git y al menos uno de los puntos de ruta fuera del árbol de trabajo, o cuando ejecuta el comando fuera de un árbol de trabajo controlado por Git.



Use comm -13 (requiere archivos ordenados) :

$ cat file1 one two three $ cat file2 one two three four $ comm -13 <(sort file1) <(sort file2) four


si tiene vim instalado, intente esto:

vimdiff file1 file2

o

vim -d file1 file2

lo encontrarás fantástico.