4

最初の列の値で並べ替えられた列を持つ 2 つのファイルがあり、最初の列に 2 番目の値が存在する場合にのみそれらをマージしたいと考えています。

最初のファイルはこんな感じ

man01 xxx yyy zzz
man02 xxx yyy zzz
man03 xxx yyy zzz
man04 xxx yyy zzz

2 番目のファイル

man01 sss
man08 sss

そして、望ましい出力は

man01 xxx yyy zzz sss
man02 xxx yyy zzz
man03 xxx yyy zzz
man04 xxx yyy zzz

参加しようとしましたが、最初のファイルに 2 番目のファイルの値が存在する必要があります:/

4

2 に答える 2

15

参加してこれを行うことができ-aます。オプションを検討しましたか? a.txt と b.txt のペアにできないファイル行ごとに行が生成されます。

join -a1 a.txt b.txt

man01 xxx yyy zzz sss
man02 xxx yyy zzz
man03 xxx yyy zzz
man04 xxx yyy zzz
于 2012-04-28T14:43:58.690 に答える
0

まあ、それはエレガントなコマンド ラインの使い方の美しさではありませんが、これについてはどうですか?

perl -we 'open F1, "<file1.txt"; open F2, "<file2.txt"; my %f2 = map {/(\S+)/ ? ($1=>$_) : ()} <F2>; while (<F1>) { chomp; print; if (/(\S+)/ && exists $f2{$1}) { $f2{$1} =~ /\S+\s+(.*)/ and print " $1"; } print "\n"; }'

更新: 上記に取り組んでいる間に、@bunting と @c00kiemon5ter がはるかにエレガントな答えを思いついたようです。優秀な!

于 2012-04-28T14:53:41.010 に答える