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.