使用带有重复项的awk比较两个文件中的两列

时间:2018-05-31 19:25:19

标签: awk

档案1

A4gnt   0   0   0   0.3343
Aaas    2.79    2.54    1.098   0.1456
Aacs    0.94    0.88    1.063   0.6997
Aadac   0   0   0   0.3343
Aadacl2 0   0   0   0.3343
Aadat   0.01    0   1.723   0.7222
Aadat   0.06    0.03    1.585   0.2233
Aaed1   0.28    0.24    1.14    0.5337
Aaed1   1.24    1.27    0.976   0.9271
Aaed1   15.91   13.54   1.175   0.163
Aagab   1.46    1.14    1.285   0.3751
Aagab   6.12    6.3 0.972   0.6569
Aak1    0.02    0.01    1.716   0.528
Aak1    0.1 0.19    0.561   0.159
Aak1    0.14    0.19    0.756   0.5297
Aak1    0.16    0.18    0.907   0.6726
Aak1    0.21    0   0   0.066
Aak1    0.26    0.27    0.967   0.9657
Aak1    0.54    1.65    0.325   0.001
Aamdc   0.04    0   15.461  0.0875
Aamdc   1.03    1.01    1.019   0.8817
Aamdc   1.27    1.26    1.01    0.9285
Aamdc   7.21    6.94    1.039   0.7611
Aamp    0.06    0.05    1.056   0.9136
Aamp    0.11    0.11    1.044   0.9227
Aamp    0.12    0.13    0.875   0.7584
Aamp    0.22    0.2 1.072   0.7609

文件2

Adar
Ak3
Alox15b
Ampd2
Ampd3
Ankrd17
Apaf1
Aplp1
Arih1
Atg14
Aurkb
Bcl2l14
Bmp2
Brms1l
Cactin
Camta2
Cav1
Ccr5
Chfr
Clock
Cnot1
Crebrf
Crtc3
Csnk2b
Cul3
Cx3cl1
Dnaja3
Dnmt1
Dtl
Ednra
Eef1e1
Esr1
Ezr
Fam162a
Fas
Fbxo30
Fgr
Flcn
Foxp3
Frzb
Fzd6
Gdf3
Hey2
Hnf4

所需的输出将是两个文件的第一列中匹配的位置打印出第一个文件中的所有列(包括重复项)。

我试过

awk 'NR==FNR{a[$1]=$2"\t"$3"\t"$4"\t"$5; next} { if($1 in a) { print $0,a[$1] } }' File2 File1 > output

但由于某种原因,我只获得了一些点击率。有谁知道为什么?

1 个答案:

答案 0 :(得分:1)

首先读取第二个文件,并将第一列值存储在数组arr中作为数组键,然后读取第一个文件,如果file1的第一列存在于使用file2创建的数组arr中,则从file1打印当前行/记录。

awk 'FNR==NR{arr[$1];next}$1 in arr' file2 file1

<强> 优势:

如果您使用a[$1]=$2"\t"$3"\t"$4"\t"$5; next,如果有任何具有相同密钥的数据将替换为之前的值,

但是如果您使用arr[$1];next,我们只存储唯一键,而$1 in arr会处理重复记录,即使它存在