
Ich habe eine Projektanforderung, bei der ich Datei1 von oben nach unten lesen und Spalte 2 davon mit Spalte 3 von Datei2 abgleichen muss. Beide Dateien sind durch Tabulatoren getrennt.
Wenn ein Datensatz übereinstimmt, muss ich den vollständigen Datensatz aus Datei 1 in die neue Datei 3 schreiben, und wenn er nicht übereinstimmt, muss ich denselben Datensatz in die Fehlerdatei (Datei 4) schreiben. Datei 1 und Datei 2 enthalten 500-510 Datensätze. Ich muss mit dem Lesen von Datei 1 von Anfang an beginnen und den Wert von Spalte 2 in Spalte 3 von Datei 2 finden (vollständiger Scan von oben nach unten, falls erforderlich).
Datei1
ZZA 01 LIST18
ZZY 02 LIST38
UTW 80 LIST100
OOP 11 LIST56
Datei2
A1 21138 99999 LIST18
W1 20223 99999 LIST44
Z9 20355 99999 LIST56
O9 21002 21154 LIST11
Datei3
ZZA 01 LIST18
OOP 11 LIST56
Datei4
ZZY 02 LIST38
UTW 80 LIST100
Antwort1
Wenn Sie Spalte 3 von Datei1 mit Spalte 4 von Datei2 abgleichen möchten, können Sie Folgendes verwenden awk
:
awk -F'\t' '
NR==FNR{ arr[$4]; next }
{ print > (($3 in arr) ? "file3" : "file4") }
' file2 file1
Dies liest zuerst Datei2 und speichert das vierte Feld im Array arr
als Index.
Dann liest man Datei1 und print
jeden Datensatz. Wenn das dritte Feld im Array vorhanden ist, leitet man die Ausgabe an Datei3 um, andernfalls an Datei4.