【发布时间】:2017-08-19 22:30:41
【问题描述】:
我有两个文件(分隔符是制表符)
文件1:db.txt
string1 string2 string3 001 string4
string5 string6 string7 002 string8
string9 string10 string11 003 string12
文件2:query.txt
id1 001
id2 003
我想匹配 file1 和 file2 并打印(如果匹配)db.txt 的第 1 到 5 列和query.txt 的第 1 列
我尝试使用 awk,这里是我的代码:
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$2]=$4;next}$4 in a{print $1,$2,$3,$4,$5,a[$1]}' query.txt db.txt
但我只得到一个包含匹配项的文件(?我至少是这样认为的)和 db.txt 文件的列
编辑:我更复杂的db2.txt
string1 <TAB> string2 <TAB> 9999 abc dehi [way:pn9999] <TAB> 001 <TAB> org; string3 string4
string5 <TAB> string6 <TAB> 9999 dwd meti [way:pn8999] <TAB> 002 <TAB> org2; string7
string8 <TAB> string9 <TAB> 9999 dwd meti [way:pn7999] <TAB> 003 <TAB> org4; string10
【问题讨论】:
-
该键是否始终位于
db文件的第 4 个字段中? -
有时是不同的键,但是是的
-
后续问题:我对两个略有不同的文件有疑问。我想根据第一列匹配 2 个文件,当有匹配时,它应该打印 file1 和 file2 的第 2 列。这就是我的代码:
awk 'BEGIN{FS=OFS="\t"} FNR == NR { a[$1] = $1; next } $1 in a { print a[$2], $2 }' -
把它作为一个新问题发布,你会得到更多的报道。