Awk 当两个不同的列匹配时,打印两个文件中的行

Awk 当两个不同的列匹配时,打印两个文件中的行,awk,Awk,我有两个tab delim文件 file 1 B T 4 tab - 1 C 5 - cab 5 A 2 - ttt D T 18 1111 - file 2 K A 3 0.1 T B 4 0.3 P 1 5 0.5 P 5 2 0.11 我需要根据文件1 col1和3和文件2 col2和3合并这两个文件,并在两个文件中打印行。我期待以下输出: B T 4 tab - T B 4 0.3 1 C 5 - cab P 1 5 0.5 5 A 2 - ttt P 5 2 0.

我有两个tab delim文件

file 1 

B T 4 tab -
1 C 5 - cab
5 A 2 - ttt
D T 18 1111 -

file 2

K A 3 0.1 
T B 4 0.3 
P 1 5 0.5 
P 5 2 0.11 
我需要根据
文件1 col1和3
文件2 col2和3
合并这两个文件,并在两个文件中打印行。我期待以下输出:

B T 4 tab - T B 4 0.3 
1 C 5 - cab P 1 5 0.5 
5 A 2 - ttt P 5 2 0.11 
我试着根据我过去遇到的一个类似问题进行改编:

awk 'NR==FNR {a[$1,$3] = $2"\t"$4"\t"$5; next} $2,$3 in a {print a[$1,$3],$0}' file1 file2
但没有成功,我得到的输出如下所示,类似于file2:

 K  A   3   0.1 
 T  B   4   0.3 
 P  1   5   0.5 
 P  5   2   0.11

代码中有两个小问题:

awk 'NR==FNR{a[$1,$3]=$0; next} ($2,$3) in a {print a[$2,$3], $0}' file1 file2
#                  parentheses -^ ----^
#                                            $2,$3  ----^

你似乎接近解决方案了。到底是什么问题?你用你的代码能得到什么?您确定分隔符是选项卡而不是单个空格吗?为什么写
a[$1,$3]=$2“\t”$4“\t”$5
而不是
a[$1,$3]=$0
<代码>打印[$1,$3],$0应该是
打印[$2,$3],$0
不是吗?是的,打印[$2,$3],$0,谢谢!请你澄清一下这部分好吗?我不明白…是的,正如Sheller所说,你似乎不太明白awk的诀窍来执行file1和file2的部分代码,即:
NR==FNR{code for file1;next}{code for file2}
(为拼写而编辑,doah!)你需要
$2,$3
作为你的密钥,因为你正在“操作”你的第二个文件,其中您的钥匙是
$2,$3
。但是您使用第一个文件中的key=
$1、$3
将数据存储在数组中。钥匙应该这样匹配,如果您使用第二个文件中的
$1,$3
,钥匙将不会匹配好运!请你解释一下为什么需要括号好吗?POSIX说应该加括号:。
gawk
手册在这里提到了它们:。