簡體   English   中英

用於匯總文件列的 awk 命令

[英]Awk command for summing up columns of a file

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

有沒有什么有效的方法可以為此目的編寫“awk”命令? 注意我不想每次都寫 $2+$4+$6 像這樣,可能是一個變量?

舊.dat:

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

new.dat(想要的)

-36.0331  11 

這只是文件的一行。

可以使用for循環。

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

使用沒有 for 循環的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM