2013-10-25 54 views
0

我有這段代碼在列出屬於特定值bin的對象時非常適合我。唯一的問題是我無法使用空格或製表符分隔符來獲得輸出。輸出中的空格或製表符perl

use strict; 
use warnings; 
use 5.14.0; 
my $file = "test_counter.txt"; 
open DATA, '<', $file or die "$!"; 
my %hash; 
while (<DATA>){ 
    next if /^\s*$/m;) 
    my ($key1,$key2,$val) = /^(\w.+)\|(\w.+) (1|(\d+)(\.(\d+)))$/; 
    $val = int($val*10)/10; 
    $hash{$val}{$key1}++; 
    $hash{$val}{$key2}++; 
    } 
for (-10..10){ 
    $_ = $_/10; 
    say "$_\t", $hash{$_} ? keys $hash{$_} : ''; 
    } 

輸入test_counter.txt文件看起來是這樣的:

data|all 0.12 
cup|bed 0.16596 
bed|all 0.221 
cup|all 0.21123 
data|bed 0.388 
cup|bed 0.35 
bed|data 0.412 
data|all 0.5236 
data|cup 0.565 
bed|all 0.6174 
all|cup 0.65 
cup|data 0.678 

和輸出我得到的是:

-1 
-0.9  
-0.8  
-0.7  
-0.6  
-0.5  
-0.4  
-0.3  
-0.2  
-0.1  
0 
0.1 bedcupdataall 
0.2 bedcupall 
0.3 bedcupdata 
0.4 beddata 
0.5 cupdataall 
0.6 bedcupdataall 
0.7 
0.8 
0.9 
1 

我想有相同的,但有一個標籤或者在對象之間留有空白,或者理想情況下,當在對象中找不到對象時,使用製表符分隔的輸出和空白處。類似這樣的:

-1 
    -0.9  
    -0.8  
    -0.7  
    -0.6  
    -0.5  
    -0.4  
    -0.3  
    -0.2  
    -0.1  
    0 
    0.1 bed cup data all 
    0.2 bed cup all 
    0.3 bed cup data 
    0.4 bed data 
    0.5 cup data all 
    0.6 bed cup data all 
    0.7 
    0.8 
    0.9 
    1 

謝謝你的任何建議!

回答

1

使用join到陣列中的所有元素與一些分隔符連接在一起:

join "\t", keys %{$hash{$_}}; 

e.g:

say "$_\t", $hash{$_} ? join "\t", keys %{$hash{$_}} : ''; 
+0

這是完美的,易於理解!非常感謝!! – Gabelins

+0

不客氣,很高興提供幫助。 – RobEarl

相關問題