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

使用带有重复项的awk比较两个文件中的两列,awk,Awk,文件1 文件2 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

文件1

文件2

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
所需的输出将是两个文件中第一列中匹配的位置,打印出第一个文件中的所有列(包括重复项)

我试过了

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

但由于某些原因,我只得到了很少的点击率。有人知道为什么吗

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

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

如果使用
a[$1]=$2“\t”$3“\t”$4“\t”$5;下一步
,如果有任何具有相同键的数据将替换为以前的值


但是如果你使用
arr[$1];接下来
,我们只存储唯一键,arr中的
$1
负责处理重复记录,即使它存在

两个文件中的第1列没有共同点,File1中的所有列1都以A开头,您可以看到File2中没有共享关键字。您可能应该显示您得到的与您期望的相比(这是创建MCVE-的重要部分)?另一部分是删除文件2中不以“A”开头的条目,因为文件1中的数据只包含以“A”开头的行。在读取文件1时,您会删除任何重复记录,只保留第1列中给定值的最后一个记录。这可能是您的最大麻烦,但很难确定。感谢各位回答我。我很抱歉抱歉,这只是一个例子,我的列表很大,我有几个匹配但没有打印出来检查源代码,没有共享关键字,OP的命令工作正常这仍然是有效的建议;它将处理“重复出现的键”-一旦还有一些共同的键值。@haifzhan,是的,为什么要使用这么多资源在数组中存储4列时,最好以其他方式读取它,节省资源,如果有可能丢失,也可以尝试其他方式duplicate@AkshayHegde我同意,但问题是
但由于某些原因,我的点击率很低。有人知道为什么吗?
OPs代码已经完全按照您的建议执行了,只是周围有一堆无关的代码。
awk 'FNR==NR{arr[$1];next}$1 in arr' file2 file1