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 associatifseen
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 tableaumissing
. - À la
END
, nous imprimons les lignes manquantes.