簡體   English   中英

無法在 perl 中使用空格拆分行並保存到變量

[英]Cannot split line and save to variable using whitespace in perl

我在解析文件時遇到了一些麻煩。 文件中的兩行包含單詞“映射”,我想提取這兩行中的數字。

文件如下所示:

這是我的代碼:

my %cellHash    = ();
my $mapped      = 0;
my $alnPairs    = 0;
my @mappedReads = ();

while (<ALIGN_SUMMARY>) {
    chomp($_);

    if (/Mapped/) {
        print "\n$_\n";
        $mapped = (split / /, $_)[2];
        push(@mappedReads, $mapped);
    }

    if (/Aligned pairs/) {
        print "\n$_\n";
        $alnPairs = (split / /, $_)[4];
    }
}

{ $cellHash{$cellDir} } = (
    'MappedR1' => $mappedReads[0] ,
    'MappedR2' => $mappedReads[1] ,
    'AlnPairs' => $alnPairs ,
);

foreach my $cellName ( keys %cellHash){
    print OUTPUT $cellName,
        "\t", ${ $cellHash{$cellName} }{"LibSize"},
        "\t", ${ $cellHash{$cellName} }{"MappedR1"},
        "\t", ${ $cellHash{$cellName} }{"MappedR2"},
        "\t", ${ $cellHash{$cellName} }{"AlnPairs"},
        "\n";
}

但是 OUTPUT 文件只有“AlignedPairs”列,而 MappedR1 或 MappedR2 中沒有任何內容。

我究竟做錯了什么? 謝謝!

當我查看文件時,似乎有多個空格。 這是我的意思以及我為提取數字所做的工作的示例。

my $test = "blah   :    123455";
my @test_ary = split(/ /, $test);
print scalar @test_ary . "\n";   # Prints the size of the array

$number = $1 if $test =~ m/([0-9]+)/;
print "$number\n";      # Prints the extracted number

運行輸出:

Size of array: 8
The extracted number: 123455

希望這可以幫助。

首先,如果您希望有人為您實際測試某些內容,而不是圖像,請粘貼您的實際輸入和輸出。 其次,您不是在空格上拆分,而是在單個文字空間上拆分。 使用特殊情況split ' ', $_; 拆分任意長度的空白,丟棄前導和尾隨空白。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM