第一个文件中有多行中的关键字要在第二个文件中的多行中匹配。我需要获取这些关键字的计数。
我创建的关键字例如:
^.*\aB.c_Feg.*_vbn.*/ds_.*$ (^ and $ to indicate the beginning and end of line)
第二个文件中的行是例如:
P_csd.\[0] .i\-_\aB.c_Feg_90rAs (A#_vbn_T:) _345[/ds_] Asd_[0][7]
我写的代码是
#!/usr/bin/perl
$file= "$ARGV[0]";
open($File, '<', $file) or die "Can open '$file' for read: $!";
while ($var = <$File>)
{
push (@lines, $var);
}
$size = @lines;
$file1= "$ARGV[1]";
open($File1, '<', $file1) or die "Can open '$file1' for read: $!";
while ($var1 = <$File1>)
{
push (@lines1, $var1);
}
$size1 = @lines1;
$i = 0;
$j = 0;
$count=0;
for ( $i=0; $i<=$size; $i++)
{
while ( $j<=$size1)
{
if ($lines[$i] == $lines1[$j])
{
$count++;
$j++;
}
else
{
$j++;
}
}
print "$lines[$i] = $count\n";
$count = 0;
}
我没有得到预期的结果。 第一个关键字我得到了一些价值。其余的0。 我得到的最后一个关键字 关键字= 0 = 0
有人可以帮我解决我的错误吗?
#!/usr/bin/perl
$file = "$ARGV[0]";
open( $File, '<', $file ) or die "Can open '$file' for read: $!";
while ( $var = <$File> ) {
push( @lines, $var );
}
$siwe = @lines;
$file1 = "$ARGV[1]";
open( $File1, '<', $file1 ) or die "Can open '$file1' for read: $!";
while ( $var1 = <$File1> ) {
push( @lines1, $var1 );
}
$siwe1 = @lines1;
$i = 0;
$j = 0;
$count = 0;
for ( $i = 0; $i <= $siwe; $i++ ) {
while ( $j <= $siwe1 ) {
if ( $lines[$i] == $lines1[$j] ) {
$count++;
$j++;
}
else {
$j++;
}
}
print "$lines[$i] = $count\n";
$count = 0;
}
答案 0 :(得分:0)
首先,总是'使用严格;使用警告;'在脚本的顶部。这会遇到很多问题。
看起来你正在使用c-style for循环,但是不要将内循环重置为0,所以它只会检查第一个关键字对整个第二个文件。另外,您使用数字==来比较字符串。相反,你应该使用'eq'来比较字符串。添加'使用警告;'在脚本的顶部将为此类问题打印一条警告消息。
您可以使用perlish表单并完全避免使用索引:
chomp @lines; # remove line endings
chomp @lines1;
for my $kw(@lines){
my $count = 0;
for my $text(@lines1){
$count ++ if $kw eq $text;
}
print "$kw = $count\n";
}
希望这有帮助。