Comparez les têtes de deux fichiers en bash

11

Je peux faire diff filea filebpour voir la différence entre les fichiers. Je peux aussi faire head -1 fileapour voir la première ligne de filea ou fileb. Comment puis-je combiner ces commandes pour montrer la différence entre la première ligne de filea et la première ligne de fileb?

Martijn Burger
la source

Réponses:

22

Si votre shell prend en charge la substitution de processus , essayez:

diff <(head -n 1 filea) <(head -n 1 fileb)
cuonglm
la source
J'avais déjà vu la commande de substitution de processus quelque part, mais je ne savais pas ce qu'elle faisait. Merci !
edi9999
6

Si vous ne comparez que la première ligne de chaque fichier, vous vous souciez peut-être des changements au niveau des mots au sein de la ligne, en utilisant dwdiff:

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

dwdiffa de belles options, comme -ccoloriser les mots modifiés.

Ou, en utilisant sedau lieu de la tête:

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

que le manuel pour la tête suggère est plus portable que la tête, car la syntaxe de la tête a changé au fil du temps par head -1rapport àhead -n 1

En outre, vous pouvez simplement observer les changements, avec un peu moins de frappe:

head -n1 -q filea fileb

qui affiche les deux lignes, l'une en dessous de l'autre, pour une comparaison visuelle facile.

James Scriven
la source
0

Vous pouvez utiliser:

if [ "`head -1 file1`" == "`head -1 file2`" ]; then echo "the same"; fi
Lambert
la source
2
Notez qu'il répondrait «la même» si file1 est un fichier vide (ou non lisible) et la première ligne de file2 est vide.
Stéphane Chazelas
Je n'ai pas dit que cette méthode est 'idiot proof' mais si vous voulez rapidement faire correspondre la première ligne de deux fichiers ...
Lambert