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 $2
weiter 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] : $i
kann vereinfacht werden, $i = a[$i]
wenn Sie sicher sind, dass eine Übereinstimmung vorliegt, oder wenn Sie Nichtübereinstimmungen durch leere Felder ersetzen möchten.