我正在尝试根据文件 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