![](/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.