Awk-Vergleich von 2 Dateien mit mehreren Spalten und Drucken von Zeilen aus beiden Dateien

Awk-Vergleich von 2 Dateien mit mehreren Spalten und Drucken von Zeilen aus beiden Dateien

Ich habe also zwei Flachdateien im folgenden Format

Datei1.txt

Customer1 12345 12346 12347 15646
Customer2 14444 14445

Datei2.txt

12345 aol.com
12347 gmail.com
12346 google.com
14444 yahoo.com
14445 outlook.com
15646 space.com

Meine gewünschte Ausgabe wäre:

Customer1 aol.com gmail.com google.com space.com
Customer2 yahoo.com outlook.com

Mir ist bisher Folgendes eingefallen, aber es scheint nur Spalte 2 aus Datei 1 zu verwenden. Gibt es eine Möglichkeit, diesen Befehl zu erweitern, um alle Spalten in Datei 1 einzuschließen?

awk 'NR==FNR {a[$1]=$2; next} $2 in a {print $0, a[$2]}' OFS='\' file2.txt file1.txt

Antwort1

Sie müssen die Felder $2weiter durchlaufen in File1.txt:

$ awk 'NR==FNR {a[$1]=$2; next} {for (i=2;i<=NF;i++) $i = $i in a ? a[$i] : $i} 1' File2.txt File1.txt
Customer1 aol.com google.com gmail.com space.com
Customer2 yahoo.com outlook.com

Dies $i = $i in a ? a[$i] : $ikann vereinfacht werden, $i = a[$i]wenn Sie sicher sind, dass eine Übereinstimmung vorliegt, oder wenn Sie Nichtübereinstimmungen durch leere Felder ersetzen möchten.

verwandte Informationen