Awk 如何在unix中基于一个匹配列合并两个csv文件。列在两个文件中的位置不同

Awk 如何在unix中基于一个匹配列合并两个csv文件。列在两个文件中的位置不同,awk,Awk,我想根据匹配的列值将file2.csv与file1.csv合并。文件2的col1需要与文件1的col4匹配。如果匹配,则将file2.csv与file1.csv合并 文件2.csv 1111_2222_2222,3333 1112_2223_2224,3333 File1.csv d20200317,v0000,7777,2001_0218_AAAA,111 d20200318,v0000,7777,0102_5913_AAA,111 我尝试了以下awk命令,但它不起作用: awk 'NR=

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

文件2.csv

1111_2222_2222,3333
1112_2223_2224,3333
File1.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
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,V222173952001_0218_AAAA,111
d20200318,V222173950102_5913_AAA,111

非常感谢Ravindra!这个命令对我来说几乎可以正常工作。但是我发现我在结果中丢失了文件2中的一些记录。但根据我的要求,命令对我来说是合适的。再次感谢!:)嗨,拉文德拉,我还有一个问题。在我的输出文件中,我想对第5列的值求和,如果前四列相同,我只想生成一条记录。我的awk命令如下所示,我根据需要的输出修改了您的命令。awk'BEGIN{FS=OFS=“,”}FNR==NR{a[$1]=$2;next}$4在{print$1,$2,$3,a[$4],$5}中。@Rachna03,是的。非常感谢。请求你打开一个新的线程并在这里ping我链接。请添加您在该帖子评论中提到的您的努力,因为人们鼓励在论坛中这样做,一旦您打开新的链接,请告诉我。嗨,对不起,我忘了更新您。我通过一些偶然发现的线索准备了关于我的新请求的查询,这就是为什么我没有提出新请求的原因。:)@Rachna03,抱歉Rachn我没听懂,你想提出一个新问题吗?