我想比较一行与文件中的每一行,如果前三列相同,我想组合这些行并将第四列添加到一起
到目前为止,这是我的perl脚本
a 4360 5440 23
a 4360 5440 44
a 4360 5440 247
b 0 1090 10
b 0 1090 11
b 1090 3550 10
b 1090 3550 11
这就是我输入的内容
a 4360 5440 314
a 0 1090 21
a 1090 3550 21
这就是我想要的输出
viewPagerVP.setCurrentItem(0);
现在我什么都没得到
答案 0 :(得分:2)
如果您在代码中添加了use warnings
和use strict
,则会看到:
Global symbol "$oldLet" requires explicit package name at foo.pl line 8.
Global symbol "$oldLet" requires explicit package name at foo.pl line 9.
Global symbol "$oldStart" requires explicit package name at foo.pl line 9.
Global symbol "$oldStop" requires explicit package name at foo.pl line 9.
Global symbol "$chr" requires explicit package name at foo.pl line 10.
Global symbol "$oldNum" requires explicit package name at foo.pl line 10.
Execution of foo.pl aborted due to compilation errors. at foo.pl line 18.
问题是您使用的是尚未声明的变量,因此它们隐式为空,因此您的if ( defined $oldLet )
将不会为真。
解决方案是在while
循环之前声明变量。
另一个问题是,当您可能意味着$chr
时,您尝试打印$let
。
这是一个工作版本:
<强> count.pl 强>
#!/usr/bin/env perl
use warnings;
use strict;
my ($oldLet,$oldStart,$oldStop,$oldNum);
while (<>) {
my ($let, $start, $stop, $num) = split;
if ( defined $oldLet ) {
if ($let eq $oldLet and $start == $oldStart and $stop == $oldStop) {
$oldNum += $num; # Add up the num column
} else {
# Output the results
print $oldLet,"\t",$oldStart,"\t",$oldStop,"\t",$oldNum, "\n";
$oldNum = $num;
}
} else {
$oldNum = $num;
}
$oldLet = $let;
$oldStart = $start;
$oldStop = $stop;
}
# Last group
print $oldLet,"\t",$oldStart,"\t",$oldStop,"\t",$oldNum, "\n";
<强>输出强>
cat input | perl count.pl
a 4360 5440 314
b 0 1090 21
b 1090 3550 21