【问题标题】:How to merge two csv files based on one matching column in unix. The position of column is different in both file如何根据 unix 中的一个匹配列合并两个 csv 文件。两个文件中列的位置不同
【发布时间】:2020-06-28 10:51:12
【问题描述】:

我想根据匹配的列值将 file2.csv 与 file1.csv 合并。文件 2 的 col1 需要与文件 1 的 col4 匹配。如果匹配,则将 file2.csv 与 file1.csv 合并。

file2.csv

1111_2222_2222,3333
1112_2223_2224,3333

文件1.csv

d20200317,v0000,7777,2001_0218_AAAA,111
d20200318,v0000,7777,0102_5913_AAA,111

我尝试了下面的 awk 命令,但它不起作用:

awk 'NR==FNR{a[$2]=$1;next}{print $0"," a[$1];}' File1.csv file2.csv

【问题讨论】:

    标签: awk


    【解决方案1】:

    为什么 OP 的尝试不起作用: 默认情况下,awk 使用字段分隔符作为空格,因此我们需要将 FS 值设置为 =,因为字段csv 文件中的分隔符是,。

    考虑到您要合并文件并将 Input_file1.csv 中的列添加到 Input_file2.csv 的最后一个位置。

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

    输出如下。

    d20200317,v22​​221,7395,2001_0218_AAAA,111 d20200318,v22221,7395,0102_5913_AAA,111

    【讨论】:

    • 非常感谢拉文德拉!该命令对我的要求几乎可以正常工作。但我发现我在结果中缺少来自 file2 的一些记录。但是根据我的要求,Command 对我来说很好。再次感谢! :)
    • 嗨,Ravindra,我还有一个问题。在我的输出文件中,我想总结第 5 列的值,并且如果第 4 列相同,则只想生成一条记录。我的 awk 命令如下所示,我根据我需要的输出修改了你的命令。 awk 'BEGIN{FS=OFS=","} FNR==NR{a[$1]=$2;next} $4 in a{print $1,$2,$3,a[$4],$5}' 。
    • @Rachna03,是的。谢谢你。请求您打开一个新线程并在此处 ping 我链接。请务必添加您在该帖子中的 cmets 中提到的努力,因为人们在论坛中鼓励这样做,一旦您打开新链接,请告诉我链接。
    • 嗨对不起,我忘了更新你。我通过一些命中和跟踪准备了对我的新请求的查询,这就是为什么没有提出新请求。 :)
    • @Rachna03,抱歉,Rachn,我没听明白,你想打开一个新问题吗?
    猜你喜欢
    • 2019-06-28
    • 1970-01-01
    • 2015-01-18
    • 2015-12-22
    • 2019-06-20
    • 1970-01-01
    • 2015-01-30
    • 2018-04-07
    • 2016-01-12
    相关资源
    最近更新 更多