0
Ich habe zwei Dateien. Wenn Feld-9 von File-1 und Feld-1 von File-2 gleiches werden dann ersetzen Feld 1 von File-1 mit Feld 2 von File-1Vergleichen und Ersetzen von Feldern mit awk
file1:
12345||||||1000||756432||||
aaaaa||||||986754812345||986754||||
ccccc||||||134567222222||134567||||
file2:
756432|AAAAAAAAAAA
986754|20030040000
Die erwartete Ausgabe lautet:
12345||||||AAAAAAAAAAA||756432||||
aaaaa||||||20030040000||986754||||
ccccc||||||134567222222||134567|||
ich diesen Code versucht
awk -F"|" 'NR==FNR{a[$1]=$2} NR>FNR{$7=a[$2];print}' OFS='|' file2 file1
, aber anstatt das Feld zu ersetzen, wird es gelöscht.
Vielen Dank für Ihren Vorschlag, Könnten Sie bitte eine [$ 9] = "erklären!" – SGS
@SGS: Sicher, mit 'a [$ 9] = ""' wir testen, ob Das Array 'a' enthält einen Wert für die Zeichenfolge, die im Feld $ 9 dargestellt wird. Daher ändern wir nur den Wert von $ 7, wenn der entsprechende Wert in Datei2 gefunden wird. – user000001
Anstatt 'a [$ 9]! =" "' Könnte man '$ 9 in a' in Betracht ziehen. Mit ersteren fügt awk tatsächlich ein Array-Element mit $ 9 als Index und leerem Wert hinzu. Letzteres überprüft einfach, ob es da ist, ohne zusätzlichen Speicher zu verwenden. Normalerweise ist es in jedem Fall in Ordnung, aber es ist gut, den Unterschied zu berücksichtigen, wenn große Dateien beteiligt sind. – jas