4

我有两个文件,其列按第一列的值排序,只有当第二个值存在于第一个值时,我才想合并它们。

第一个文件是这样的

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

第二个文件

man01 sss
man08 sss

所需的输出是

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

我尝试加入,但要求第一个文件中存在第二个文件的值:/

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 回答