So etwas scheint in meinen Tests in Ordnung zu sein, wenn man bedenkt, dass beide Dateien die gleiche Anzahl an Zeilen und Felder = Array gleiche Abmessungen:
$ cat file1
a1,a2,a3
a4,a5,a6
$ cat file2
b1,b2,b3
b4,b5,b6
$ awk 'NR==FNR{f1[FNR]=$0;next};{split(f1[FNR],ff1,",");split($0,ff2,","); \
for (f=1;f<=length(ff1);f++) printf ff1[f]","ff2[f](f!=length(ff1)?",":"\n")}' file1 file2
a1,b1,a2,b2,a3,b3
a4,b4,a5,b5,a6,b6
Kurze Erklärung:
awk liest zuerst die eine Datei und die zweite Datei.
NR==FNR{f1[FNR]=$0;next}
: Lesen Sie die erste Datei und erstellen Sie ein Array f1 mit Indices die Zeilennummer von file1 und Inhalt der ganze Zeile 0 $
Wenn die erste Datei dann fertig ist der Rest des Codes während der Verarbeitung von file2 ausgeführt:
split(f1[FNR],ff1,",")
: Da beide Dateien die gleiche Anzahl von Zeilen haben, spaltet diese vorherige gelesene Datensätze von Datei1 (gespeichert in Array f1) in ein neues Array ff1, indem Sie Komma als Trennzeichen verwenden.
split($0,ff2,",")
: Gleichermaßen teilt dies $ 0 = aktueller Datensatz/aktuelle Zeile von Datei2 in ein Array mit dem Namen ff2, mit Komma als Trennzeichen.
for (f=1;f<=length(ff1);f++) printf ff1[f]","ff2[f](f!=length(ff1)?",":"\n")
diesem einen iteriert durch den Array-Elementen von FF1 (FF1 die gleiche Länge hat FF2) und druckt Daten aus beiden FF1 und FF2.
(f!=length(ff1)?",":"\n")
: Dieses druckt Komma ,
, während wir nicht das Ende der Array FF1/FF2 erreicht haben, sonst druckt ein Newline-Zeichen \n
Was haben Sie versucht? Die meisten von uns hier sind glücklich, Ihnen zu helfen, Ihr Handwerk zu verbessern, aber sind weniger glücklich, als kurze Bestellung unbezahlte Programmierer zu handeln. Zeigen Sie uns Ihre bisherige Arbeit in einem [MCVE] (http://stackoverflow.com/help/mcve), dem Ergebnis, das Sie erwartet haben, und den Ergebnissen, die Sie erhalten haben, und wir werden Ihnen helfen, es herauszufinden. – ghoti