最初の列の値に基づいて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