一个文件有N列,其中某一列(第一列)为顺序数字,现在的任务是查找这些顺序数字是否为完全顺序,即上一个和下一个的间距为1.
文件例子:
ChrB01 1 -0.000000 -0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 -0.000000
ChrB01 2 -0.000000 -0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 -0.000000
ChrB01 3 0.000000 -0.051293 -0.105360 -0.162518 -0.223142 -0.287680 -0.356673 -0.430780
ChrB01 4 0.000000 -0.051292 -0.105359 -0.162516 -0.223140 -0.287677 -0.356668 -0.430774
ChrB01 5 0.000000 -0.051293 -0.105360 -0.162518 -0.223143 -0.287681 -0.356673 -0.430781
ChrB01 6 0.000000 -0.105360 -0.216586 -0.334369 -0.459531 -0.593062 -0.736163 -0.890313
ChrB01 7 0.000000 -0.105359 -0.216583 -0.334365 -0.459526 -0.593055 -0.736153 -0.890301
ChrB01 8 0.000000 -0.105360 -0.216585 -0.334368 -0.459530 -0.593061 -0.736161 -0.890310
ChrB01 9 0.000000 -0.105359 -0.216583 -0.334365 -0.459526 -0.593055 -0.736153 -0.890301
ChrB01 10 0.000000 -0.133530 -0.273742 -0.421377 -0.577311 -0.742590 -0.918479 -1.106529
ChrB01 11 0.000000 -0.192370 -0.394990 -0.609059 -0.836002 -1.077541 -1.335773 -1.613299
ChrB01 12 0.000000 -0.133531 -0.273743 -0.421378 -0.577312 -0.742591 -0.918481 -1.106532
ChrB01 13 0.000000 -0.133531 -0.273744 -0.421379 -0.577314 -0.742593 -0.918483 -1.106535
ChrB01 14 0.000000 -0.192372 -0.394993 -0.609063 -0.836008 -1.077549 -1.335783 -1.613312
ChrB01 15 0.000000 -0.287681 -0.590684 -0.910821 -1.250260 -1.611629 -1.998155 -2.413876
ChrB01 16 0.000000 -0.287682 -0.590685 -0.910822 -1.250261 -1.611630 -1.998157 -2.413878
ChrB01 17 0.000000 -0.287681 -0.590684 -0.910821 -1.250260 -1.611628 -1.998155 -2.413875
ChrB01 18 0.000000 -0.411697 -0.846341 -1.306732 -1.796234 -2.318945 -2.879936 -3.485597
ChrB01 19 0.000000 -0.338951 -0.695731 -1.072396 -1.471392 -1.895669 -2.348829 -2.835347
ChrB01 20 0.000000 -0.430739 -0.886223 -1.369508 -1.884260 -2.434940 -3.027049 -3.667500
ChrB01 21 0.000000 -0.440431 -0.906849 -1.402554 -1.931526 -2.498628 -3.109894 -3.772944
ChrB01 22 0.000000 -0.440438 -0.906863 -1.402575 -1.931555 -2.498667 -3.109944 -3.773007
ChrB01 23 0.000000 -0.500433 -1.031135 -1.596125 -2.200309 -2.849764 -3.552163 -4.317410
ChrB01 24 0.000000 -0.526562 -1.086407 -1.684109 -2.325273 -3.016877 -3.767776 -4.589452
ChrB01 25 0.000000 -0.526565 -1.086415 -1.684122 -2.325291 -3.016903 -3.767810 -4.589497
perl语言代码:
#!/usr/bin/perl
use strict;
use warnings;
my $infile = shift;
open AA, $infile or die $!;
my $lastword;
my $str;
while ($str = <AA>){
my @t = split /\s+/, $str;
if($lastword eq ""){
$lastword = $t[0];
}else{
print "$lastword\t$t[0]\n" if($t[0] - $lastword > 1);
$lastword = $t[0];
}
}
输出结果
87 89
816 842
856 858
859 861
865 867
872 874
883 885
892 894
1015 1235
1869 1871
1916 1918
1941 1943
4668 4670
5609 5611
5623 5625
5846 5848
5975 5977
5980 5983
5990 5992
6081 6083
6118 6121
6122 6125
while()中的算法是很经典的,这个感谢我同事ZYL,在他的指导下弄的。