我正在尝试根据文件2中的匹配来映射文件1中的条目。我试过了 (grep -Ff file1 file2),join等,但它只输出匹配的条目。例如,
File1:
Cat
Dog
Fish
Horse
File2: (tab delimited)
Cat 'Meow Meow'
Dog Bark
Horse 'Gallop gallop'
“喵喵”是一个单词。列分隔符仅为'\ t'。我期望的输出是,
Output file:
Cat Meow Meow
Dog Bark
Fish
Horse Gallop gallop
怎么做?
先谢谢,
AP
答案 0 :(得分:1)
加入 命令的好例子:
join -j1 -o1.1,2.2 -t $'\t' -a1 <(sort File1) <(sort File2)
输出:
Cat Meow Meow
Dog Bark
Fish
Horse Gallop gallop
-o FORMAT
- 在构建输出行时服从 FORMAT
-a FILENUM
- 还会在文件 FILENUM 中打印无法使用的行,其中 FILENUM 为1或2
答案 1 :(得分:1)
awk
:
awk 'FNR==NR{a[$1]=$2;next} {print $1, a[$1]}' file2 file1
答案 2 :(得分:1)
Ugglyest使用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