1

第一个文件

D07        AAS@qqq
B82        GG^333
D84        GG@WW
F59        LL$$EE

第二个文件

D84        /usr/ss
F59        /usr/jh
B82        /usr/kk
D07        /usr/ks

输出应该是

D84     GG@WW       /usr/ss
F59     LL$$EE    /usr/jh
B82     GG^333      /usr/kk
D07     AAS@qqq     /usr/ks

基本上,我想将第一个文件的数据排序到第二个文件

我试过:

BEGIN {
   FS = OFS = "\t";
}
NR==FNR {
   Values[$1+0] = $2;
   next;
}
{
   $1 = $1 OFS ($1+0 in Values ? Values[$1+0] : "");
   print $0;
}
' 1stfile 2ndfile 

任何人都可以提供任何简单的解决方案来实现这一目标吗?

4

2 回答 2

1

如果您愿意对文件进行排序然后使用 bash,则不需要 perljoin

$ ll
file1
file2
$ cat file1
D07        AAS@qqq
D82        GG^333
D84        GG@WW
D59        LL$$EE
$ cat file2
D84        /usr/ss
D59        /usr/jh
D82        /usr/kk
D07        /usr/ks
$ sort -n file1 > file1a
$ sort -n file2 > file2a
$ cat file1a
D07        AAS@qqq
D59        LL$$EE
D82        GG^333
D84        GG@WW
$ cat file2a
D07        /usr/ks
D59        /usr/jh
D82        /usr/kk
D84        /usr/ss
$ join file1a file2a > file3
$ cat file3
D07 AAS@qqq /usr/ks
D59 LL$$EE /usr/jh
D82 GG^333 /usr/kk
D84 GG@WW /usr/ss
于 2012-07-12T06:39:24.700 回答
0

使用 perl:

perl -nle '/(.*?)\s+(.*)/&&($h{$1}[$t]=$2);eof&&$t++;END{while(($k,$v)=each%h){print"$k @{$v}"}}' 1stfile 2ndfile
于 2012-07-12T19:02:35.880 回答