2014-09-15 5 views
0

밑줄 구분 기호가있는 CSV가 있습니다.Awk에서 여러 줄 사용

101_1_variableName_(value) 
101_1_variableName1_(value2) 

에 : 나는 이런 식으로 하나를 변환해야 8 개 라인을 가지고

101 1 (value) (value2) 

(바람직하게는 서로 다른 상자에)

문제는 내가 모르겠입니다 awk에서 여러 줄을 사용하여 한 줄을 만드는 법. 어떤 도움을 주셔서 감사합니다.

UPDATE : (입력 + 출력)

101_1_1_trialOutcome_found_berry    
101_1_1_trialStartTime_2014-08-05 11:26:49.510000   
101_1_1_trialOutcomeTime_2014-08-05 11:27:00.318000   
101_1_1_trialResponseTime_0:00:05.804000    
101_1_1_whichResponse_d   
101_1_1_bearPosition_6   
101_1_1_patch_9   
101_1_1_food_11 

(마지막 부분 모두 한 줄)

101 1 1 found_berry 2014-08-05 11:26:49.510000 2014-08-05 11:27:00.318000 0:00:05.804000 d 6 9 11 
+1

작은 예제가 더 좋을 것입니다. 값이'()'로 묶여 있습니까? '다른 상자에서 '무엇을 의미합니까? –

+0

값은() 안에 포함되어 있지 않습니다. 그러나 그것들은 도움이된다면 모두 밑줄로 그려집니다. – lacraig2

+0

CSV 파일이라는 것을 의미하며 다른 사람에게 열어서 다른 상자에 각 값을 넣을 수 있다고 말하면됩니다. – lacraig2

답변

0

당신이 사용할 수있는 펄 :

use strict; 
use warnings; 

my %hash=(); 

while (<DATA>) { 
    if (m/^([0-9_]+)_(?:[^_]+)_(.*?)\s*$/) { 
     push @{ $hash{join(' ', split('_', $1))} }, $2;  
    } 
} 

print "$_ ". join(' ', @{ $hash{$_} })."\n" for (keys %hash); 

__DATA__ 
101_1_1_trialOutcome_found_berry    
101_1_1_trialStartTime_2014-08-05 11:26:49.510000   
101_1_1_trialOutcomeTime_2014-08-05 11:27:00.318000   
101_1_1_trialResponseTime_0:00:05.804000    
101_1_1_whichResponse_d   
101_1_1_bearPosition_6   
101_1_1_patch_9   
101_1_1_food_11 

인쇄 :

101 1 1 found_berry 2014-08-05 11:26:49.510000 2014-08-05 11:27:00.318000 0:00:05.804000 d 6 9 11 

또는 perl 한 줄 버전 :

$ perl -lane ' 
> push @{ $hash{join(" ", split("_", $1))} }, $2 if (m/^([0-9_]+)_(?:[^_]+)_(.*?)\s*$/); 
> END { print "$_ ". join(" ", @{ $hash{$_}})."\n" for (keys %hash); } 
> ' file.txt 
101 1 1 found_berry 2014-08-05 11:26:49.510000 2014-08-05 11:27:00.318000 0:00:05.804000 d 6 9 11