shell 抽取文件中指定的行(多行)

两个文件,a文件为指定的样本,b文件为目标抽取的文本。
如图:
a:
clipboard.png

b,第一列为样本编号:

clipboard.png
以前习惯拿python抽样,但效率不快。所以渴求大神教一下,如何用shell或者perl抽样?感觉效率会快很多

阅读 5.9k
3 个回答

用sed命令

cat a | paste -sd '|' | sed -r 's/(.+)/\(\1\)/' | grep -E -f - b

随手编写,未测试

my $fileA=shift;
my $fileB=shift;
open A,"$fileA";
my %ha;
while(<A>){
    chomp;
    $ha{$_}="";
}

open B,"$fileB";
while(<B>){
    chomp;
    my $tag=(split /,/,$_)[0];
    if(exists $ha{$tag}){
        print "$_\n";
    }
}
close A;
close B;
推荐问题