如何根据其他文件进行过滤

时间:2013-02-12 22:18:43

标签: linux text file-io

说我有这种格式的文件 文件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命令?

3 个答案:

答案 0 :(得分:1)

awk 'NR==FNR{A[$1];next}($2 in A)' file2 file1

答案 1 :(得分:0)

如果两个文件都已排序或顺序正确,您可以使用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

答案 2 :(得分:0)

不一定快或不漂亮,但有诀窍:

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;