Unix-Dateiabgleichslogik

Unix-Dateiabgleichslogik

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 arrals Index.
Dann liest man Datei1 und printjeden Datensatz. Wenn das dritte Feld im Array vorhanden ist, leitet man die Ausgabe an Datei3 um, andernfalls an Datei4.

verwandte Informationen