用于汇总文件列的Awk命令

时间:2015-09-28 15:16:02

标签: linux bash awk

我有一个文件(old.dat)让我们说20列。现在,我想要一个包含2列的不同文件(new.dat),即x和y,其中y是old.dat文件的所有偶数列的总和,即y = $ 2 + $ 4 + $ 6 + ...( old.dat文件,X将保持不变)

有没有有效的方法为此目的编写'awk'命令? 注:我不想每次写$ 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 个答案:

答案 0 :(得分:3)

可以使用for循环。

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

答案 1 :(得分:0)

使用gnu-awk 4而不使用for循环的另一种解决方案

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