![](/img/trans.png)
[英]Compare two files with awk - check if values from two columns in file1 are included somewhere in two columns in file2
[英]compare two columns in awk and print values from lookup files into output file
我有两个文件,第一个文件有~16000个文件,第二个文件是查找文件有~4000行。
file1的示例内容如下:
id,title,name,value,details
01,23456, , ,abcdefg
02,23456, , ,abcdefg
03,12345, , ,abcdefg
04,34534, , ,abcdefg
...
查找文件file2的示例内容如下:
sno,title,name,value
1,23456,abc,xyz
2,12345,cde,efg
3,34534,543,234
现在我的要求是比较查找文件中file1的第2列,并将查询文件中column3和column4的值插入到新的输出文件中。
输出文件应如下所示:
id,title,name,value,details
01,23456,abc,xyz,abcdefg
02,23456,abc,xyz,abcdefg
03,12345,cde,efg,abcdefg
04,34534,543,234,abcdefg
我通过查看现有问题尝试了几次迭代,但没有得到我想要的结果。 使用awk的任何解决方案都会非常有用。
$ cat vino.awk
BEGIN { FS = OFS = "," }
NR==FNR { name[$2]=$3; value[$2]=$4; next }
{ print $1, $2, name[$2], value[$2], $5 }
$ cat file1
id,title,name,value,details
01,23456, , ,abcdefg
02,23456, , ,abcdefg
03,12345, , ,abcdefg
04,34534, , ,abcdefg
$ cat file2
sno,title,name,value
1,23456,abc,xyz
2,12345,cde,efg
3,34534,543,234
$ awk -f vino.awk file2 file1
id,title,name,value,details
01,23456,abc,xyz,abcdefg
02,23456,abc,xyz,abcdefg
03,12345,cde,efg,abcdefg
04,34534,543,234,abcdefg
这是一个awk oneliner:
awk -F, 'FNR==NR {n[$2]=$3;v[$2]=$4} FNR!=NR{OFS=","; print $1,$2,n[$2],v[$2],$5}' file2 file1
我们的想法是两次处理,首先是file2存储所有的名称和值,然后是file1,打印出每一行,包括收集的名称和值。
awk -F"," 'BEGIN{OFS=","} NR==FNR {a[$2]=$3","$4;next} {print $1,$2,a[$2],$5;}' file2 file1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.