当基于一列匹配和打印两个文件时awk

时间:2017-03-27 09:27:11

标签: bash awk

我有两个文件(分隔符是制表符)

文件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并打印(如果匹配){1}}的第1列到第5列db.txt的第1列

我尝试使用awk,这是我的代码:

query.txt

但我只得到一个带匹配的文件(?我至少这么认为)和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

2 个答案:

答案 0 :(得分:1)

AMD$ cat f1
id1 001
id2 003

AMD$ cat f2
string1 string2 string3 001 string4
string5 string6 string7 002 string8
string9 string10 string11 003 string12

AMD $ awk 'NR==FNR {a[$2]=$1; next} {for(i in a) if(index($0,i)) print a[i], $0}' f1 f2
id1 string1 string2 string3 001 string4
id2 string9 string10 string11 003 string12

答案 1 :(得分:1)

您可以像这样使用awk

awk 'BEGIN{FS=OFS="\t"} FNR == NR { a[$2] = $1; next }
$4 in a { print $0, a[$4] }' query.txt db.txt

string1 string2 string3 001 string4 id1
string9 string10 string11 003 string12 id2