GNU/Linux >> Tutoriels Linux >  >> Linux

Comment comparer deux fichiers, puis ajouter une ligne qui ne correspond pas partiellement ?

J'essaie de comparer deux fichiers (Extensions.txt et Temp.txt ). S'il y a une ligne qui ne correspond pas partiellement à partir de Extensions.txt dans Temp.txt Je voudrais ajouter la ligne manquante à Temp.txt .

Extensions.txt (Très basique, une colonne) :

111
1234
4321

Temp.txt :

1234/sip:[email protected]:5060  9421b96c5e   Avail   1.480
4321/sip:[email protected]:5060  e9b6b979a4   Avail   1.855

Fondamentalement, ce que je veux faire, c'est trouver une correspondance basée sur tout ce qui précède le / dans la première colonne et s'il n'y a pas de correspondance, je voudrais imprimer la ligne non correspondante au bas du fichier pour qu'elle se termine comme ceci :

1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111

Jusqu'à présent, j'ai essayé grep -v et ça ne produit pas les résultats que je veux, j'ai aussi essayé avec awk et il semble que ce soit la voie à suivre, mais je ne comprends pas parfaitement comment awk travaille afin de produire les résultats appropriés.

Réponse acceptée :

Vous pouvez analyser les fichiers avec awk

awk -F '/' '
    FNR == NR {seen[$1] = $0; next}
    {if ($1 in seen) print seen[$1]; else missing[$1]}
    END {for (x in missing) print x}
' Temp.txt Extensions.txt

Sortie :

1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111
  • Définissez le séparateur de champ sur une barre oblique, -F '/'
  • L'action après FNR == NR est exécuté pour les lignes du premier fichier d'entrée. On stocke les lignes dans le tableau associatif seen comme clés, et aller à next ligne.
  • La seconde action est exécutée pour le second fichier, lorsque FNR != NR . Si le premier champ correspond, nous imprimons la ligne stockée, else nous sauvegardons le champ dans un autre tableau missing .
  • À la END , nous imprimons les lignes manquantes.

Linux
  1. Comment comparer trois fichiers sous Linux à l'aide de l'outil diff3

  2. Comment ajouter des numéros de ligne aux fichiers texte sous Linux

  3. Comment ajouter plusieurs lignes à un fichier ?

  4. Comment copier des fichiers sous Linux et Unix ? 10 exemples de commandes cp

  5. Comment comparer le contenu de deux archives tar

Comment supprimer des fichiers et des répertoires à l'aide de la ligne de commande Linux

Comment comparer et fusionner des fichiers texte sous Linux

Comment comparer et fusionner des fichiers texte sous Linux (partie 2)

Comment utiliser la commande cp pour copier des fichiers et des répertoires

Comment comparer deux fichiers dans un terminal Linux

Utilisation de la commande Diff pour comparer deux fichiers dans un terminal Linux