脚本正在打印输入行的数量,我希望它打印另一个文件中存在的输入行数量
#!/usr/bin/perl -w
open("file", "text.txt");
@todd = <file>;
close "file";
while(<>){
if( grep( /^$_$/, @todd)){
#if( grep @todd, /^$_$/){
print $_;
}
print "\n";
}
如果例如文件包含
1
3
4
5
7
并且将从中读取的输入文件包含
1
2
3
4
5
6
7
8
9
我希望它能打印1,3,4,5和7 但正在打印1-9
UPDATE ****** 这是我的代码,我收到此错误 readline()在关闭文件句柄todd at ./may6test.pl第3行。
#!/usr/bin/perl -w
open("todd", "<text.txt");
@files = <todd>; #file looking into
close "todd";
while( my $line = <> ){
chomp $line;
if ( grep( /^$line$/, @files) ) {
print $_;
}
print "\n";
}
这对我没有意义,因为我有另一个基本上做同样事情的脚本
#!/usr/bin/perl -w
open("file", "<text2.txt"); #
@file = <file>; #file looking into
close "file"; #
while(<>){
$temp = $_;
$temp =~ tr/|/\t/; #puts tab between name and id
my ($name, $number1, $number2) = split("\t", $temp);
if ( grep( /^$number1$/, @file) ) {
print $_;
}
}
print "\n";
答案 0 :(得分:5)
好的,这里的问题是 - grep
也设置了$_
。因此grep { $_ } @array
将始终为您提供数组中的每个元素。
在基本级别 - 你需要:
while ( my $line = <> ) {
chomp $line;
if ( grep { /^$line$/ } @todd ) {
#do something
}
}
但我反而建议你可能要考虑建立你的行的哈希值:
open( my $input, '<', "text.txt" ) or die $!;
my %in_todd = map { $_ => 1 } <$input>;
close $input;
while (<>) {
print if $in_todd{$_};
}
注意 - 您可能想要查看尾随换行符。