Ersetzen eines Felds einer CSV-Datei basierend auf Einträgen in einer zweiten CSV-Datei

Ersetzen eines Felds einer CSV-Datei basierend auf Einträgen in einer zweiten CSV-Datei

Ich versuche, zwei Dateien mithilfe von zusammenzuführen awk. Ich möchte die Felder 1 und 2 aus Datei 1 unverändert drucken und Feld 3 entsprechend einer in Datei 2 gespeicherten Zuordnung ersetzen.

Datei1:

1,top,yel
2,dress,bl
3,jeans,bl

Datei2:

bl,blue
yel,yellow

Gewünschte Ausgabe:

1,top,yellow
2,dress,blue
3,jeans,blue

Was ich bisher versucht habe

Hier ist der awkBefehl, den ich bisher ausprobiert habe:

gawk 'BEGIN {FS=OFS=","} NR==FNR {seen[$3]=$1 "," $2;next} ($1) in seen {print seen[$1],$2}' file1.csv file2.csv

Wenn "bl" jedoch zweimal in Datei 1 vorkommt, enthält die Ausgabe nur eines der Vorkommen. Im obigen Beispiel fehlt Zeile "2" aus Datei1.

3,jeans,blue
1,top,yellow

Antwort1

Basierend auf Ihrer gewünschten Ausgabe klingt es so, als ob Sie eigentlich zuerst lesen möchten file2.csv, eine Zuordnung zwischen den Feldern erstellen und diese dann anwenden möchten auffile1.csv

awk 'BEGIN{OFS=FS=","} NR==FNR{clr[$1]=$2; next} {$3=clr[$3]; print}' file2.csv file1.csv

verwandte Informationen