我想写一个Perl程序。第一个输入文件是2列文本。第一列是标签,第二列是搜索字符串。第二个输入文件也有2列。第一列是标签,第二列是要搜索的文本。例如,根据第二列,约翰(在file1中)在file2中更像约翰尼,而不是约翰。
file1
John AABBBCCCDEE
Jam WWQQQQQQQERRRTTTTTTfile2
Jami EWWQQQQQQQERRRTTTTTTTTTT
Johni AAAAABBBCCCDEEEEEEHHHHHH
Mark WWWCCVVVVVVFFFFFFFTTTTTT
ROB ##@@@########VVVVVVVVVVV
John WWADFRWSSSSSSDDDDDqqqqqq输出
Jami EWWQQQQQQQERRRTTTTTTTTTT Jam WWQQQQQQQERRRTTTTTT
Johni AAAAABBBCCCDEEEEEEHHHHHH John AABBBCCCDEE我尝试了下面的代码,但它不能以我想要的方式工作。
#!/user/bin/perl
use warnings;
use strict;
my ($infile1) = $ARGV[0];
my ($infile2) = $ARGV[1];
open(my $fh1, "<$infile1");
while(my $file1 = <$fh1> ){
my @file1 = split ("\t| ", $file1);
my $name_file1 = $file1[0];
my $ID_file1 = $file1[1];
my @matchline_file2 = `cat $infile2 | grep $name_file1`;
for my $ID_file1 (@file1){
if (grep my $ID_file2 eq $ID_file1, @matchline_file2){
print "found\n";}else{print "not_found\n";}}}发布于 2014-02-18 10:50:24
这不会像您的输出那样以相反的顺序打印结果。我不确定那是不是故意的。您可以将结果存储在数组中,并根据需要反转或排序。你的例子非常有限,这只是对你想要做的事情的最佳估计。
#!/usr/bin/perl
use warnings;
use strict;
my ($infile1) = $ARGV[0];
my ($infile2) = $ARGV[1];
my $search_file = "";
open(my $fh2, "<$infile2");
while(my $line = <$fh2>)
{
$search_file .= $line;
}
open(my $fh1, "<$infile1");
while(my $line = <$fh1>)
{
chomp($line);
if($line =~ m/\w+\s+(.*)/)
{
my $search_string = quotemeta("$1");
if($search_file =~ m/(.*$search_string.*)/)
{
print "$1\t$line\n";
}
else
{
print "Could not find: $line\n";
}
}
else
{
print "Invalid line: $line\n";
}
}https://stackoverflow.com/questions/21842620
复制相似问题