1

我有两个文件,我想将第 2 列和第 3file1列与file3. 如果找到了模式,我想输出整行,以及最后的第file21 列file1

我有以下两种文件类型:(file2有很多列(tab分隔)但是,第 2 列和第 3 列可以匹配 2 和 3 中的file1。)

文件 1

name1 1 12343442 
name2 2 32434242
name3 3 982793749

文件2

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,所以我只想读一次。有任何想法吗?谢谢!

4

1 回答 1

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,你被keyand弄糊涂了value。在这里,您希望$2FS$3成为关键,并$1成为价值。
  • ('$2 FS $3' in a)也不对,去掉单引号
于 2013-10-10T20:12:53.387 回答