2017-02-28 65 views
0

我有這個表表計算依賴於第一列

0  56 56 
0  45 100 
0  70 80 
60  90 90 
0  100 200 
0.1 200 300 

在這個表,我想通過 awk計算的col2col3價值取決於col1值:如果col1 < 60開始計算col2col3如果col1 >= 60的值,則停止並開始新的計算並將值放在新的列上,比如說col4col5


重述,基於commentresponse

對於行,其中在第1列的值小於60時,這些值在2列和第3應該被添加到單獨的款項。當列1中的行值爲60或更大時,打印第2列和第3列的總和並重新歸零總和,然後打印讀入的行。在輸入結束時,打印第2列的剩餘總和和3.


任何人都可以幫我這個嗎?

輸出看起來像

col4 col5 
171 236    first calc 
60  90    stop 
300 500    sec calc 
+0

你可以修改你想要的輸出與所有列? – haifzhan

+1

你的要求是無法解釋的 - 你需要解釋你做得更清楚。看起來您可能希望爲列1包含值小於60的行輸出第2列和第3列的總和。當您在列1中遇到值爲60或更大的行時,打印先前行的總和並重新設置總數,並打印讀入的行。在文件末尾,打印前一行的總和。這是你的想法嗎? –

+0

Jonathan Leffler謝謝你,這正是我想要的 – user1306006

回答

0
$ awk ' 
    { 
    if($1<60){ 
     sum_b+=$2; 
     sum_c+=$3; 
     print $0 
    } else { 
     print $1,$2,$3,sum_b,sum_c; 
     sum_b=0; 
     sum_c=0 
    } 
    } 
    END { 
    print"","","",sum_b,sum_c 
    } 
' datafile 
0 56 56 
0 45 100 
0 70 80 
60 90 90 171 236 
0 100 200 
0.1 200 300 
    300 500 
1
awk '($1<60){sumc2+=$2;sumc3+=$3} ($1>=60){print sumc2, sumc3; sumc2=sumc3=0;print} END{print sumc2, sumc3}' sample.csv 

sumc2sumc3分別爲列2和欄3的總和的總和。 當列1 < 60時,總結列;一旦column1> = 60,打印求和值,重置它們並打印當前輸入。

既然你沒有提供完整的所需的輸出,我打印以下格式

輸出:

171 236 
60  90 90 
300 500 
+0

你可以在不喪失功能的情況下刪除BEGIN塊。 – karakfa

+0

你是對的@karakfa!我簡化了命令 – haifzhan