匹配两个文件中的第一列

时间:2014-04-17 00:38:15

标签: perl

我有两个大小不等的文件。第一个文件有两列,第二个文件只有一列。我想将第二个文件中的列与第一个文件中的第一列匹配,如果它们匹配,则从第一个文件中打印整行。很简单,但我被卡住了。这是我在打开并存储数组中文件的内容后所做的事情

foreach(@q) #second file
{
        $line=$_;
        foreach(@gs) #first file
        {
           $line1=$_;
           if ( $line1=~ /$line/ )
           {
             print $line1;
           }

        }
}

这不会产生输出。

2 个答案:

答案 0 :(得分:0)

我怀疑你的一个或两个文件的行结尾可能会被绊倒。无论如何,没有必要将你的文件,只是第二个文件。一个正则表达式很可能是矫枉过正,一个简单的相等检查就足够了,而且更有可能是你想要的。

以下可能是您的意图:

use strict;
use warnings;
use autodie;

my $file1 = 'foo.txt';
my $file2 = 'bar.txt';

open my $fh2, '<', $file2;
my @keys = <$fh2>;
chomp(@keys);

open my $fh1, '<', $file1;

while (my $line = <$fh1>) {
    my $fields = split ' ', $line;

    if (grep {$fields[0] eq $_} @keys) {
        print $line;
    }
}

答案 1 :(得分:0)

use strict;
use warnings;
my $file2 = 'foo.txt';
my $file1 = 'bar.txt';
my @line1;
open FF,$file2;
    while(<FF>)
    {
        unshift(@line1,$_); 
    }
close(FF);
open FH,$file1;
    while(<FH>)
    {
        my $se=$_;
        chomp($se);
        foreach my $data (@line1)
        {
            if($data=~m/^\s*$se\s*\t/is)
            {
                print $data."\n";
            }   
        }
    }
close(FH);

试试这个......