在bash中合并两个csv文件

时间:2017-04-11 07:52:11

标签: bash

我有两个csv文件。

第一个文件的列

col1, col2, col3,......col4095, col4096, col4097

第二个文件的列

col1, col2, col3,......,col4095, col4096, col4097

预期输出 - 丢弃第一个文件的最后一列

col1, col2, col3.......,col4095. col4096, col1, col2, col3....col4095, col4096, col4097

两个文件的行数相同,我想将这两个文件合并为一个文件。

2 个答案:

答案 0 :(得分:8)

使用paste

paste -d, f1.csv f2.csv > out.csv

忽略第一个文件的最后一列:

awk -F, 'NF-=1' OFS=, f1.csv | paste -d, - f2.csv > out.csv

答案 1 :(得分:0)

仅限awk

awk -F ',[[:blank:]]*' 'NR==FNR {for (i=1;i<NF;i++) out=out$i", " ; next} \
                        {out=out$0} END{print out}' f1.csv f2.csv
  • -F ',[[:blank:]]*'将字段分隔符设置为,,后跟任意数量的空格/标签

  • NR==FNR仅适用于第一个文件,然后执行{for (i=1;i<NF;i++) out=out$i", " ; next},将迭代,并连接所有字段,但变量{{1}中的最后一个字段}

  • 第二个文件的记录将连接到变量out - out

  • 最后,打印变量{out=out$0}的值 - out

示例:

END{print out}