Perl,基于一列和条件

时间:2015-09-11 09:04:40

标签: arrays perl multidimensional-array

我有一个包含四列和多行的AoA构造。以下是数据(输入)的示例。

DQ556929    103480190   103480214   154943
DQ540839    103325247   103325275   2484
DQ566549    103322763   103322792   99
DQ699634    103322664   103322694   0
DQ544472    103322664   103322692   373
DQ709105    103322291   103322318   46
DQ705937    103322245   103322273   486
DQ699398    103321759   103321788   1211
DQ710151    103320548   103320577   692251
DQ548430    102628297   102628326   1
DQ558403    102628296   102628321   855795
DQ692476    101772501   101772529   481463
DQ544274    101291038   101291068   484047
DQ723982    100806991   100807020   1
DQ709023    100806990   100807020   3
DQ712307    100806987   100807014   0
DQ709654    100806987   100807012   571051
DQ707370    100235936   100235962   1481849

我想将所有行元素(按顺序)分组并写入文件。 条件是,如果第四列值小于1000并且最小两个值彼此相邻,则将它们分组,如果值小于1000并且位于大于1000的值之间,则将它们视为单个并单独追加到同一文件和值中超过1000的也写成一个块但不影响第二和第三列的顺序。

此文件是我之前程序的输出,现在为此我尝试实现我的手但得到一些奇怪的结果。这是我的一大堆代码,但不起作用。伙计我需要帮助,如果我在这里很好地执行我的逻辑,作为初学者,我愿意接受任何评论。并在任何地方纠正我。

my @dataf= sort{ $a->[1]<=> $b->[1]} @data;
@dataf=reverse @dataf;
for(my $i>=0;$i<=$#Start;$i++)
{
    print "$sortStart[$i]\n";
    my $diff = $sortStart[$i] - $sortStart[$i+1];
    $dataf[$i][3]= $diff;
#   $IDdiff{$ID[$i]}=$diff;
}

#print Dumper(@dataf);

open (CLUST, ">> ./clustTest.txt" );
for (my $k=0;$k<=$#Start;$k++)
{   

    for (my $l=0;$l<=3;$l++)
    {
#       my $tempdataf = shift $dataf[$k][$l];
#       print $tempdataf;       

        if ($dataf[$k][3]<=1000)
        {
            $flag = 1;
            do
            {
                print CLUST"----- Cluster $clustNo -----\n";
                print CLUST"$dataf[$k][$l]\t";
                if ($dataf[$k][3]<=1000)
                {
                    $flag1 = 1;
                }else {$flag1=0;}

            $clustNo++;
            }until($flag1==0 && $data[$k][3] > 1000);

            if($flag1==0 && $data[$k][3] > 1000)
            {
                print CLUST"Singlet \n";
                print CLUST"$dataf[$k][$l]\t";
                next;
            }
        #print CLUST"$dataf[$k][$l]\t";     #@IDdiff

        }

    print CLUST"\n";
    }
}

文件中的预期输出:

  

汗衫   DQ556929 103480190 103480214 154943 DQ540839 103325247 103325275 2484

     

Cluster1中   DQ566549 103322763 103322792 99 DQ699634 103322664 103322694 0 DQ544472 103322664 103322692 373 DQ709105 103322291 103322318 46 DQ705937 103322245 103322273 486

     

汗衫   DQ699398 103321759 103321788 1211 DQ710151 103320548 103320577 692251 DQ548430 102628297 102628326 1 DQ558403 102628296 102628321 855795 DQ692476 101772501 101772529 481463 DQ544274 101291038 101291068 484047

     

Cluster2中   DQ723982 100806991 100807020 1 DQ709023 100806990 100807020 3 DQ712307 100806987 100807014 0

     

汗衫   DQ709654 100806987 100807012 571051 DQ707370 100235936 100235962 1481849

0 个答案:

没有答案