Müssen 2 Dateien validieren und 3. Datei schreiben

Müssen 2 Dateien validieren und 3. Datei schreiben

Datei1 – Nur Daten der Spalte 1. Andere Spalten sind nur Kopfzeilen.

Column1, column55, column56, column57, column58, column59, column60,column61, column62
123
124
221
225
333
432

Datei2:

Column1,Column2,Column3,Column4,…………column55, column59, column58, column54, column62, column61
xxx,123,yyy,zzz…….bbb,ccc,ddd,eee,fff,ggg,hhh,c:\a\b\c\ddd,ggg,hhh,c:\a\b\c\dsada,c:\a\b\c\kkja,c:\a\b\c\dsada,c:\a\b\c\kada
xxx,124,xxx,yyy………111,222,333,444,555,vvv,ddd,c:\a\b\c\uuu,ggg,hhh,c:\a\b\c\adada,c:\a\b\c\daa,c:\a\b\c\dsada,c:\a\b\c\kkjj
xxx,221,xxx,yyy………zzz,ddd,333,fff,ccc,ddd,333,c:\a\b\c\vvv,ggg,hhh,c:\a\b\c\dads,c:\a\b\c\adaa,c:\a\b\c\dsada,c:\a\b\c\kkjakjjsa
xxx,333,xxx,yyy………kkk,444,www,333,fff,223,323,c:\a\b\c\xxx,ggg,hhh,c:\a\b\c\dddjj,c:\a\b\c\adaad,c:\a\b\c\dsada,c:\a\b\c\kki2
xxx,787,xxx,yyy………zzz,ddd,333,fff,ccc,ddd,213,c:\a\b\c\yyy,ggg,hhh,c:\a\b\c\dddkf,c:\a\b\c\fasd,c:\a\b\c\dsada,c:\a\b\c\kku3
xxx,827,xxx,yyy………kkk,444,www,333,fff,sda,sda,c:\a\b\c\zzz,ggg,hhh,c:\a\b\c\ddyu,c:\a\b\c\fsssfs,c:\a\b\c\dsada,c:\a\b\c\k233

Der Validierungsworkflow ist:

  • Wenn Spalte1 von Datei1 = Spalte2 von Datei2, dann. — Vergleiche Kopfzeile und Daten
    Und (Datei1.Spalte55 = Datei2.Spalte55. — Vergleiche nur Kopfzeile, wenn gleich
    ODER Datei1.Spalte56 = Datei2.Spalte56 — Vergleiche nur Kopfzeile, wenn gleich
    ODER Datei1.Spalte57 = Datei2.Spalte57 ) — Vergleiche nur Kopfzeile, wenn gleich
    DANN Schreibe aus Datei1 in Datei3.csv

Die gewünschte Ausgabe sollte sein: (ähnlich dem Datei1-Format, aber die Daten sollten sein)

Column1 Column55 column57, column58  column59  column60 column61, column62

Antwort1

Versuche dies,

awk -F ',' 'FNR==NR {a[$1]; next} $2 in a{print $2", "$8}' file1 file2 | sed 's/,.*\\/, /g'

123, ddd
124, uuu
221, vvv
333, xxx
  • -F '[\\\\,]'Wir benötigen zwei Trennzeichen gemäß Ihrer erwarteten Ausgabe (Komma und Backslash). Um das Backslash-Verhalten zu umgehen, benötigen wir 4 Backslashes.

Antwort2

Versuchen Sie auch

awk -F ',' '
FNR == NR   {T[$1]
             next
            }
$2 in T     {n = split ($8, X, /\\/)
             print $2, X[n]
            }
' OFS=, file1 file2 
123,ddd
124,uuu
221,vvv
333,xxx

Passen Sie die Feldnummern nach Belieben an (z. B. $8--> $55). Wenn das Ihren Anforderungen nicht entspricht, schränken Sie Ihre Spezifikation und Beispieldaten ein bzw. verbessern Sie sie.

verwandte Informationen