1

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

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)第二个文件(参考):

[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

这个文件是一个索引,有 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
...
4

2 回答 2

2

怎么样:

awk 'NR==FNR{a[$2]=$1;next}$6 in a{print $0,a[$6]}' file2 file1 > file3
于 2013-02-03T23:28:43.943 回答
0

以防万一,您甚至可以将第一列作为参考,然后您不需要最后一列进行参考检查。我的意思是假设你有

文件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 in a {print a[$1]" "$2}' file1.txt file2.txt

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

  2. 对于第二个文件,如果$1数组中存在第一列,a那么我们将先前保存的行与第二列合并$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
于 2013-02-04T06:00:18.837 回答