首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在perl中查找部分匹配的两个文件

在perl中查找部分匹配的两个文件
EN

Stack Overflow用户
提问于 2014-02-18 09:25:14
回答 1查看 277关注 0票数 1

我想写一个Perl程序。第一个输入文件是2列文本。第一列是标签,第二列是搜索字符串。第二个输入文件也有2列。第一列是标签,第二列是要搜索的文本。例如,根据第二列,约翰(在file1中)在file2中更像约翰尼,而不是约翰。

file1

代码语言:javascript
复制
John AABBBCCCDEE
Jam  WWQQQQQQQERRRTTTTTT

file2

代码语言:javascript
复制
Jami    EWWQQQQQQQERRRTTTTTTTTTT
Johni   AAAAABBBCCCDEEEEEEHHHHHH
Mark    WWWCCVVVVVVFFFFFFFTTTTTT
ROB     ##@@@########VVVVVVVVVVV
John    WWADFRWSSSSSSDDDDDqqqqqq

输出

代码语言:javascript
复制
Jami    EWWQQQQQQQERRRTTTTTTTTTT    Jam  WWQQQQQQQERRRTTTTTT
Johni   AAAAABBBCCCDEEEEEEHHHHHH    John AABBBCCCDEE

我尝试了下面的代码,但它不能以我想要的方式工作。

代码语言:javascript
复制
#!/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";}}}
EN

回答 1

Stack Overflow用户

发布于 2014-02-18 10:50:24

这不会像您的输出那样以相反的顺序打印结果。我不确定那是不是故意的。您可以将结果存储在数组中,并根据需要反转或排序。你的例子非常有限,这只是对你想要做的事情的最佳估计。

代码语言:javascript
复制
#!/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";
   }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21842620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档