说我有这种格式 文件1文件:如何筛选基于另一个文件
kk a 1
rf c 3
df g 7
er e 4
es b 3
和其他文件2:
c
g
e
我想过滤的第二列基于文件2并输出一个这样的文件:
rf c 3
df g 7
er e 4
怎么会这样的linux命令?
说我有这种格式 文件1文件:如何筛选基于另一个文件
kk a 1
rf c 3
df g 7
er e 4
es b 3
和其他文件2:
c
g
e
我想过滤的第二列基于文件2并输出一个这样的文件:
rf c 3
df g 7
er e 4
怎么会这样的linux命令?
如果两个文件都排序或按正确的顺序排列,则可以使用join
。虽然这给出了一个不同的输出
join --nocheck-order -1 2 -2 1 file1.txt file2.txt
给
c rf 3
g df 7
e er 4
用Perl,您可以读取键文件,然后检查每一行是否匹配
use strict;
use warnings;
my %keys;
open(my $f1, '<', 'file2.txt') or die("Cannot open file2.txt: $!");
while (<$f1>) {
chomp;
$keys{$_} = 1;
}
close($f1);
open(my $f2, '<', 'file1.txt') or die("Cannot open file1.txt: $!");
while (<$f2>) {
my(undef, $col2, undef) = split(' ', $_);
print if ($keys{$col2});
}
close($f2);
这将给期望
rf c 3
df g 7
er e 4
不一定很快或很漂亮,但做的伎俩:
cut -f 2 -d ' ' file1 | while read letter; do grep -n "$letter" file2 | cut -d ':' -f 1 | while read lineNo; do sed $((lineNo+1))'!d' file1; done; done;
awk 'NR==FNR{A[$1];next}($2 in A)' file2 file1
好编辑,奥拉夫=)现在更有意义! – paddy 2013-02-12 22:22:05