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.
También puede usar: colordiff : muestra la salida de diff con colores.
Acerca de vimdiff : le permite comparar archivos a través de SSH, por ejemplo:
vimdiff /var/log/secure scp://192.168.1.25/var/log/secure
Extraído de: http://www.sysadmit.com/2016/05/linux-diferencias-entre-dos-archivos.html
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.