Compara las cabezas de dos archivos en bash

11

Puedo hacer diff filea filebpara ver la diferencia entre archivos. También puedo hacer head -1 fileapara ver la primera línea de filea o fileb. ¿Cómo puedo combinar estos comandos para mostrar la diferencia entre la primera línea de archivo y la primera línea de archivo b?

Martijn Burger
fuente

Respuestas:

22

Si su shell admite la sustitución de procesos , intente:

diff <(head -n 1 filea) <(head -n 1 fileb)
Cuonglm
fuente
Ya había visto el comando de sustitución de proceso en alguna parte, pero no sabía lo que hacía. Gracias !
edi9999
6

Si solo está comparando la primera línea de cada archivo, tal vez le interesen los cambios a nivel de palabra dentro de la línea, utilizando dwdiff:

dwdiff <(head -n 1 filea) <(head -n 1 fileb)

dwdifftiene algunas buenas opciones, como -ccolorear las palabras cambiadas.

O, usando en sedlugar de cabeza:

dwdiff <(sed 1q filea) <(sed 1q fileb)

que el manual para head sugiere que es más portátil que head, ya que la sintaxis para head ha cambiado con el tiempo head -1vshead -n 1

Además, podría simplemente observar los cambios, con un poco menos de tipeo:

head -n1 -q filea fileb

que muestra las dos líneas, una debajo de la otra, para facilitar la comparación visual.

James Scriven
fuente
0

Puedes usar:

if [ "`head -1 file1`" == "`head -1 file2`" ]; then echo "the same"; fi
Lambert
fuente
2
Tenga en cuenta que respondería "lo mismo" si el archivo1 es un archivo vacío (o no legible) y la primera línea del archivo2 está vacía.
Stéphane Chazelas
No dije que este método es 'a prueba de idiotas', pero si quiere hacer coincidir rápidamente la primera línea de dos archivos ...
Lambert