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 == NRwird für die Zeilen der ersten Eingabedatei ausgeführt. Wir speichern die Zeilen im assoziativen Arrayseenals Tasten und gehen Sie zunextLinie. - Die zweite Aktion wird für die zweite Datei ausgeführt, wenn
FNR != NR. Wenn das erste Feld übereinstimmt, drucken wir die gespeicherte Zeile,elsewir speichern das Feld in einem anderen Arraymissing. - Am
END, drucken wir die fehlenden Zeilen.