我有一个文件(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
这只是文件的一行。
答案 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