Ich versuche, zwei Dateien zu vergleichen (Extensions.txt
und Temp.txt
). Wenn es eine Zeile gibt, die nicht teilweise mit Extensions.txt
übereinstimmt in Temp.txt
Ich möchte die fehlende Zeile an Temp.txt
anhängen .
Extensions.txt
(Sehr einfach, eine Spalte):
111
1234
4321
Temp.txt
:
1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
Grundsätzlich möchte ich eine Übereinstimmung finden, die auf allem vor dem /
basiert in der ersten Spalte und wenn es keine Übereinstimmung gibt, möchte ich die nicht übereinstimmende Zeile an das Ende der Datei drucken, damit sie so endet:
1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111
Bisher habe ich es mit grep -v
versucht und es bringt nicht die gewünschten Ergebnisse, ich habe es auch mit awk
versucht und es scheint, als wäre das der richtige Weg, aber ich verstehe nicht ganz, wie awk
funktioniert funktioniert, um die entsprechenden Ergebnisse zu erzielen.
Akzeptierte Antwort:
Sie können die Dateien mit awk
parsen
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
Ausgabe:
1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111
- Feldtrennzeichen auf Schrägstrich setzen,
-F '/'
- Die Aktion nach
FNR == NR
wird für die Zeilen der ersten Eingabedatei ausgeführt. Wir speichern die Zeilen im assoziativen Arrayseen
als Tasten und gehen Sie zunext
Linie. - Die zweite Aktion wird für die zweite Datei ausgeführt, wenn
FNR != NR
. Wenn das erste Feld übereinstimmt, drucken wir die gespeicherte Zeile,else
wir speichern das Feld in einem anderen Arraymissing
. - Am
END
, drucken wir die fehlenden Zeilen.