簡體   English   中英

比較awk中的兩列,並將查找文件中的值打印到輸出文件中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM