最初の列の値に基づいて2つのファイルを比較するには?

最初の列の値に基づいて2つのファイルを比較するには?

最初の列の値に基づいて2つのファイルを比較したいです。

ファイル1

aaa 23 3
bbb 56 6
ccc 45 2

ファイル2

bbb m a
aaa a m
ccc m m

出力ファイルは次のようにする必要があります。

aaa  a m
bbb  m a
ccc  m m

つまり、最初のファイルの最初の列の順序で、2番目のファイルの2番目と3番目の列を印刷する必要があります。

誰かがこれにawkスクリプトを提案できますか?

答え1

この試み:

$ awk 'FNR==NR{a[$1]=$0;next};{print a[$1]}' file2 file1

答え2

大容量ファイルの場合は非常に遅いですが、次のことができます。

$ while read a rest; do grep -w $a file2; done < file1
aaa a m
bbb m a
ccc m m

Perlではより速い方法です。

$ cat file1 | perl -lane '$k{$F[0]}=$_;
                END{
                  open(A,"file1");
                  while(<A>){/^(.+?)\s/; print $k{$1}}
               }' file2
aaa a m
bbb m a
ccc m m

関連情報