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?

Réponses:


22

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

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

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.


0

Vous pouvez utiliser:

if [ "`head -1 file1`" == "`head -1 file2`" ]; then echo "the same"; fi

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.