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 == NRest exécuté pour les lignes du premier fichier d'entrée. On stocke les lignes dans le tableau associatifseencomme clés, et aller ànextligne. - 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,elsenous sauvegardons le champ dans un autre tableaumissing. - À la
END, nous imprimons les lignes manquantes.