使用awk合并两个关联数字的文件

使用awk合并两个关联数字的文件,awk,Awk,我有两个文件,请注意,我想使用最后一列作为参考: [robert@10-2Fontes]$ head pumba.txt 0.086297 0 0.091866 1 0.097236 2 0.103616 3 0.110956 4 0.118285 5 0.125615 6 0.130077 7 0.459247 54 1) 第一个文件: [robert@10-2Fontes]$ head rxid 0.086297 id 0 udp 767 0 0.09186

我有两个文件,请注意,我想使用最后一列作为参考:

[robert@10-2Fontes]$ head pumba.txt 
0.086297 0
0.091866 1
0.097236 2
0.103616 3
0.110956 4
0.118285 5
0.125615 6
0.130077 7
0.459247 54
1) 第一个文件:

[robert@10-2Fontes]$ head rxid 
0.086297     id 0    udp    767     0
0.091866     id 1    udp    760     1
0.097236     id 2    udp    733     2
0.103616     id 3    udp    869     3
0.110956     id 4    udp    1000    4
0.459247     id 9    udp    754     54
注意:此文件有64196行

2) 第二个文件(参考):

此文件是索引,有64677行

3) 我想要一个第三个文件,它在文件2中搜索对应的号码,并将相关号码放在第一个文件的最后一列。诸如此类:

0.086297     id 0    udp    767     0 0.086297
0.091866     id 1    udp    760     1 0.091866
0.097236     id 2    udp    733     2 0.097236
0.103616     id 3    udp    869     3 0.103616
0.110956     id 4    udp    1000    4 0.110956
...
那么:

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

以防万一,您甚至可以将第一列作为引用,这样就不需要将最后一列用于引用检查。我的意思是,假设你有

文件1:

0.086297     id 0    udp    767     
0.091866     id 1    udp    760     
0.097236     id 2    udp    733     
0.103616     id 3    udp    869     
0.110956     id 4    udp    1000    
0.459247     id 9    udp    754     
和文件2:

0.086297 0
0.091866 1
0.097236 2
0.103616 3
0.110956 4
0.118285 5
0.125615 6
0.130077 7
0.459247 54
您仍然可以基于第一列将它们组合在一起,如下所示

awk'NR==FNR{a[$1]=$0;next;}$1在{print a[$1]“$2}”文件1.txt file2.txt中

  • .NR==FNR{a[$1]=$0;next;}
    对于第一个文件,第一列将用作存储整行的索引,下一部分将被跳过

  • 对于第二个文件,如果数组
    a
    中存在
    $1
    第一列,则我们将上一个保存的行与第二列
    $2

  • 最终产量

    0.086297     id 0    udp    767 0
    0.091866     id 1    udp    760 1
    0.097236     id 2    udp    733 2
    0.103616     id 3    udp    869 3
    0.110956     id 4    udp    1000 4
    0.459247     id 9    udp    754 54
    

    好极了这很有效,我真的很感激。非常感谢你。