我很困惑。这是我遇到的。
我写了一个perl代码来计算两个数字的差异,并根据差异是否大于0.5,它决定是否打印该行。
举一个玩具示例:
a 0.9 0.4
b 0.8 0.2
c 0.7 0.3
d 0.81 0.3
e 0.79 0.3
所以代码应该打印出a,b,d行而不是c,e。我尝试了两种方法:
1.直接测试差异是否大于或等于0.5,如果是,请打印:
chomp;
my @array = split/\t/;
my $diff = $array[1] - $array[2];
if ($diff >=0.5) {
print $_;
}
2.首先将差异输出到文件中,然后使用awk选择:
print $_,"\t",$diff,"\n";
Then with awk:
awk '{ if ($NF >= 0.5) print}' file
我很惊讶地发现这两种方式为我的实际文件生成了两个不同的结果(百万行)。 awk方式给出了更多的结果。我查看了两个输出的不同之处,似乎使用了所有perl方式(1)错过了一些行。
有谁知道为什么会这样?在perl中执行此计算和条件测试是否有问题?