我有两个大小不等的文件。第一个文件有两列,第二个文件只有一列。我想将第二个文件中的列与第一个文件中的第一列匹配,如果它们匹配,则从第一个文件中打印整行。很简单,但我被卡住了。这是我在打开并存储数组中文件的内容后所做的事情
foreach(@q) #second file
{
$line=$_;
foreach(@gs) #first file
{
$line1=$_;
if ( $line1=~ /$line/ )
{
print $line1;
}
}
}
这不会产生输出。
答案 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);
试试这个......