我在文件A中有值
301310
304790
500011
600462
607348
614269
我想在文本文件B中搜索所有这些值,其中包含类似
的行1.35|10|5|11|1p36.31|GPR153|P|G protein-coupled receptor 153||614269|REc|||| | |4(Gpr153)|
1.36|3|24|06|1p36.31|HES2|P|Hairy/enhancer of split, Drosophila, homolog of, 2||609970|REc|||| | ||
1.37|3|24|06|1p36.31|HES3|P|Hairy/enhancer of split, Drosophila, homolog of, 3||609971|REc|||| | ||
1.38|3|24|06|1p36.33|HES4|P|Hairy/enhancer of split, Drosophila, homolog of, 4||608060|REc|||| | ||
1.39|3|24|06|1p36.32|HES5|P|Hairy/enhancer of split, Drosophila, homolog of, 5||607348|REc|||| | ||
我想打印包含文件A中任何一个术语的所有行,并将它们打印在输出文件中。
我尝试了以下命令,但它无法正常工作
grep -w -F -f fileA fileB >file C
答案 0 :(得分:0)
如果你的grep不工作那么可能是一个perlish解决方案? 虽然我会指出 - 鉴于你的数据示例,没有找到匹配,这可能是问题的一部分。
#!/usr/bin/perl
use strict;
use warnings;
open ( my $file1, '<', "FileA" ) or die $!;
my @search_for = <$file1>;
close ( $file1 );
my $search_regex = join ( "|", map {quotemeta} @search_for );
$search_regex = qr/$search_regex/;
open ( my $file2, '<', "fileB" ) or die $!;
while ( <$file2> ) {
print if m/$search_regex/;
}
close ( $file2 );
如果您想确保没有空行:
my $search_regex = join ( "|", grep { m/^\w+$/ } map {quotemeta} @search_for );
$search_regex = qr/$search_regex/;
答案 1 :(得分:0)
当您发布问题时,您的文件是这样的:
301310
304790
500011
我编辑了格式的帖子,并删除了空行,认为这只是你编辑错误的编辑。如果您的输入文件实际 中有空行,您将要删除它们,因为grep会将它们解释为&#34;匹配空模式&#34;,它匹配每个线。它等同于:
grep "" fileB
所以,只需擦除fileA中的空行,你发布的grep命令应该可以正常工作。