我有两个文件,我想将file1
中的第2列和第3列与来自file3
的第2列和第3列相匹配。如果找到模式,我想从file2
输出整行,最后从file1
的第1列输出:
我有以下两种文件类型:
(file2
有很多列(tab
已分隔),但第2列和第3列可以匹配file1
中的2和3。)
file1
name1 1 12343442
name2 2 32434242
name3 3 982793749
file2
a 1 12343442 text1 text2 text3 value0 value2
a 1 12343442 text1 text2 text3 value2 value3
a 1 12348888 text1 text2 text3 value0 value2
b 3 982793749 text1 text4 text3 value1 value11
b 2 982793749 text1 text4 text3 value1 value11
期望的输出
a 1 12343442 text1 text2 text3 value0 value2 name1
a 1 12343442 text1 text2 text3 value2 value3 name1
b 3 982793749 text1 text4 text3 value1 value11 name3
我尝试使用awk
执行此操作。类似的东西:
awk 'BEGIN { FS = "\t" } NR==FNR { a[$1]=$2 FS $3; next} ('$2 FS $3' in a) {print $0, a[$1]}' file1 file2
但它不起作用。即使我只是尝试匹配第三列,它也不起作用。 这些文件非常大> 500mb 所以我想只阅读一次。 有任何想法吗?谢谢!
答案 0 :(得分:2)
这个单行应该有效:
awk -F'\t' -v OFS='\t' 'NR==FNR{a[$2FS$3]=$1;next}$2FS$3 in a{print $0,a[$2FS$3]}' file1 file2
代码
a[$1]=$2 FS $3;next
,您对key
和value
感到困惑。在这里,您希望$2FS$3
为关键字,$1
为值。('$2 FS $3' in a)
也不正确,请删除单引号