如果列匹配,则在两个文件中打印行

时间:2019-07-12 16:56:32

标签: awk

我有两个制表符delim文件

file1

LOC100224866    1       325001  0.133977
LOC105758527    1       75001   0.252737
LOC100218126    1       85001   0.174872
LOC105758529    1       125001  0.02342
NRF1    1       175001  0.257585
UBE2H   1       225001  0.303165
KLHDC10 1       275001  0.22267
TMEM209 1       295001  0.273941
CPA2    1       315001  0.181312
CEP41   1       345001  0.248943

file2

 0.265838 CLIC6
 0.390470 NRF1
 0.126332 UBE2H
 0.236400 LOC100224866
 0.181189 DOPEY2
 0.288050 MORC3
 0.182429 CHAF1B
 0.220355 SIM2
 0.106513 HLCS
 0.177958 DSCR3

我想将col1 file1与col2 file2匹配,并将那些与file1匹配的行添加为file2中的新列,从而保留了file2中条目的顺序。

这样输出将是

 0.390470 NRF1     NRF1    1       175001  0.257585
 0.126332 UBE2H    UBE2H   1       225001  0.303165
 0.236400 LOC100224866    LOC100224866    1       325001  0.133977

我从类似的帖子中尝试了几种策略,但是所有策略都失败了。 尝试过例如

awk -F$"\t" 'NR==FNR{a[$1]=$0; next} ($2 in a) {print $1, $2, a[$1] }' file2 file1 

1 个答案:

答案 0 :(得分:3)

您正在从文件1中找到错误的密钥。

$ awk 'NR==FNR{a[$2]=$1; next} $1 in a{print a[$1],$0}' file2 file1

0.390470 NRF1    1       175001  0.257585
0.126332 UBE2H   1       225001  0.303165
0.236400 LOC100224866    1       325001  0.133977

密钥需要匹配,如果您想重复执行print a[$1],$1,$0,则无需再次打印。