perl:在数组的散列中组合重复的键

rqenqsqc  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(365)

我对此有意见,想知道是否有人能提供一些帮助。我正在解析一个.txt文件,希望将重复的键及其值组合起来。本质上,对于每个标识符,我要存储它的高度值。每个“样本”有2个条目(a和b)。我将文件存储为:

while(...){
    @data= split ("\t", $line);  

    $curr_identifier= $data[0];
    $markername= $data[1];
    $position1= $data[2];
    $height= $data[4];

    if ($line >0){
         $result[0] = $markername;
         $result[1] = $position1;
         $result[2] = $height;
         $result[3] = $curr_identifier;

         $data{$curr_identifier}= [@result];
     }
}

这似乎工作正常,但我的问题是,当我发送这个数据到下面的函数。它会打印两次$curr\u标识符。我只想填充唯一标识符并检查是否存在$height变量。

if (!defined $data{$curr_identifier}[2]){
            $output1= "no height for both markers- failed";
 } else {
    if ($data{$curr_identifier}[2] eq " ") {
        $output1 = $markername;

    } 
 }

 print $curr_identifier, $output1 . "\t" . $output1 . "\n";

基本上,如果两个标记(a和b)都有样本高度,那么输出就是两个标记。

'1', 'A', 'B'

如果高度不存在,则报告的标记的输出为空。

'2', 'A', ' '

'3', ' ', 'B'

我的当前输出是这样打印出来的:

1, A
1, B

2, A
2, ' '

3, ' '
3, B'
_DATA_
Name Marker Position1 Height Time
1   A   A       6246        0.9706
1   B   B       3237        0.9706
2   A                   0
2   B   B       5495        0.9775
3   A   A       11254       0.9694
3   B                       0
7tofc5zh

7tofc5zh1#

您需要的输出基本上可以归结为以下几行perl代码:

while (<DATA>) {
  ($name,$mark,$pos,$heig,$time) = split /\t/;
  print "'$name','$mark','$pos'\n";
}

__DATA__
... your tab-separated data here ...

相关问题