grep 输出以包含不匹配的条目



我正在尝试根据文件 1 中的匹配项映射文件 2 中的条目。我试过了(grep -Ff file1 file2(、join 等,但它只输出匹配的条目。例如

File1:
Cat 
Dog
Fish
Horse
File2: (tab delimited)
Cat 'Meow Meow'
Dog Bark
Horse 'Gallop gallop'
"喵喵

喵喵�我期望的输出是,

Output file:
Cat Meow Meow
Dog Bark
Fish
Horse Gallop gallop

怎么做?

提前致谢,

美联社

连接 命令的好例子:

join -j1 -o1.1,2.2 -t $'t' -a1 <(sort File1) <(sort File2)

输出:

Cat     Meow Meow
Dog     Bark
Fish    
Horse    Gallop gallop

  • -o FORMAT - 在构建输出线时遵守格式

  • -a FILENUM - 同时从文件 FILENUM 打印不可配对的行,其中 FILENUM 1 或 2

with awk

awk 'FNR==NR{a[$1]=$2;next} {print $1, a[$1]}' file2 file1
有史以来

最糟糕的答案,使用Perl(当时你没有得到任何答案(:

$ perl -e '%actions = (); open my $fh ,"<", $ARGV[0] ; while (<$fh>) { chomp ; $actions{$_} = ""; } close $fh; open $fh, "<", $ARGV[1] ; while (<$fh>) { chomp; ($animal, $action) = split /s+/; $actions{$animal} = $action; } foreach (keys %actions) { print "$_ $actions{$_}n"; } ; ' file1 file2
Horse Gallop
Fish 
Dog Bark
Cat Meow

更新:限制拆分。

$ perl -e '%actions = (); open my $fh ,"<", $ARGV[0] ; while (<$fh>) { chomp ; $actions{$_} = ""; } close $fh; open $fh, "<", $ARGV[1] ; while (<$fh>) { chomp; ($animal, $action) = split (/s+/, $_, 2); $actions{$animal} = $action; } foreach (keys %actions) { print "$_ $actions{$_}n"; } ; ' file1 file2

最新更新