考虑到两个文件具有相同的行数和字段数 = 相同的数组维度,在我的测试中这样的事情似乎没问题:
$ 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
快速解释:
awk 先读取第一个文件,然后读取第二个文件。
NR==FNR{f1[FNR]=$0;next}:读取第一个文件并创建一个数组 f1,其中包含 file1 的行号并包含整行 $0
当第一个文件完成后,剩下的代码在文件2的处理过程中执行:
split(f1[FNR],ff1,",") :由于两个文件的行数相同,因此这两个文件使用逗号作为分隔符将先前读取的记录从 file1(存储在数组 f1 中)拆分为新数组 ff1。
split($0,ff2,",") :类似地,这将 $0 = 当前记录 / file2 的当前行拆分为一个名为 ff2 的数组,使用逗号作为分隔符。
for (f=1;f<=length(ff1);f++) printf ff1[f]","ff2[f](f!=length(ff1)?",":"\n")
这个循环遍历 ff1 的数组元素(ff1 与 ff2 的长度相同)并打印来自 ff1 和 ff2 的数据。
(f!=length(ff1)?",":"\n") :当我们还没有到达数组 ff1/ff2 的末尾时,这会打印逗号 ,,否则会打印一个换行符 \n