1

1番目のファイル

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

2番目のファイル

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

基本的に、1番目のファイルのデータを2番目のファイルにソートして取得したい

私はで試しました:

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 を使用する場合は、perl は必要ありません。join

$ 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 -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 に答える