GNU/Linux >> Tutoriels Linux >  >> Linux

Comment afficher uniquement des lignes différentes à l'aide de diff (bash)

a.txt :

1;john;125;3
1;tom;56;2
2;jack;10;5

b.txt :

1;john;125;3
1;tom;58;2
2;jack;10;5

Utilisez com :

comm -13 a.txt b.txt 
1;tom;58;2

Les options de ligne de commande de comm sont assez simples :

-1 supprime la colonne 1 (lignes uniques à FILE1)

-2 supprime la colonne 2 (lignes uniques à FILE2)

-3 supprime la colonne 3 (lignes qui apparaissent dans les deux fichiers)


Voici une solution simple qui, à mon avis, est meilleure que diff :

sort file1 file2 | uniq -u

  • sort file1 file2 concatène les deux fichiers et les trie
  • uniq -u imprime les lignes uniques (qui ne se répètent pas). Il nécessite que les entrées soient pré-triées.

À l'aide des spécificateurs de format de groupe, vous pouvez supprimer l'impression des lignes inchangées et n'imprimer que les lignes modifiées pour les modifications

diff --changed-group-format="%>" --unchanged-group-format="" file1 file2


En supposant que vous souhaitiez conserver uniquement les lignes uniques au fichier 2, vous pouvez faire :

comm -13 file1 file2

Notez que le comm La commande s'attend à ce que les deux fichiers soient dans un ordre trié.


Linux
  1. Comment effectuer une comparaison ligne par ligne de fichiers sous Linux à l'aide de la commande diff - Partie II

  2. Comment effectuer une comparaison ligne par ligne de fichiers sous Linux à l'aide de la commande diff

  3. commande diff pour obtenir le nombre de lignes différentes uniquement

  4. Comment lister les dossiers à l'aide des commandes bash ?

  5. Comment soustraire des lignes (lignes) avec AWK

Comment afficher les feuilles de triche des commandes Linux en utilisant par exemple

Comment afficher l'historique de Bash sans numéros de ligne

Comment afficher les informations sur le processeur Linux à l'aide de CPUFetch

Comment télécharger de l'audio uniquement avec youtube-dl

Comment afficher la sortie Tail -f avec des couleurs en utilisant uniquement Awk et afficher le reste de la sortie?

Comment modifier les lignes précédentes dans une commande à plusieurs lignes dans Bash ?