2015-09-28 68 views
-2

我有一個文件(old.dat),裏面有20列。現在,我想要一個包含2列的不同文件(new.dat),即x和y,其中y是old.dat文件的所有偶數列的總和,即y = $ 2 + $ 4 + $ 6 + ...( old.dat文件中,X將保持不變)awk命令用於總結文件列

是否有任何有效的方法來爲此目的編寫'awk'命令? N.B.我不想每次都寫這樣的$ 2 + $ 4 + $ 6,可能是一個變量呢?

old.dat:

-36.0331 1 -36.0331 2 -36.0331 3 -36.0331 2 -36.0331 1 -36.0331 2 

new.dat(所需的一個)

-36.0331 11 

這僅僅是該文件的一行。

+2

後也old.dat內容和所需的新.dat – amdixon

+0

@amdixon:是的,我編輯了我的問題。請看看文件格式。 –

+0

old.dat只有12列 - 這是否意味着列數是可變的? – amdixon

回答

3

A for loop可以使用。

awk '{s=0;for(i=2;i<=NF;i+=2)s+=$i;print$1,s}' old.dat > new.dat 
+0

非常感謝,這是我一直在尋找的命令。再次感謝! –

0

使用gnu-awk 4另一種解決方案,而不用於循環

awk 'BEGIN{RS="[ \t]+|[\n]"; c=0; s=0} 
c==0{first=$0;} 
c%2{s+=$0;} 
{c++} 
RT=="\n"{print first, s; c=0; s=0} 
END{if(c!=0) print first, s}' old.dat 

與輸入文件

 
-36.0331 1 -36.0331 2 -36.0331 3 -36.0331 2 -36.0331 1 -36.0331 2 
A 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
B 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 

 
-36.0331 11 
A 100 
B 300