天天看點

awk的求和計算使用;awk多個分隔符如何使用?

1、對于下圖,如何使用awk求所有各列的和

awk的求和計算使用;awk多個分隔符如何使用?

和:175 16 78 19

方法:awk '{for(n=1;n<=NF;n++)t[n]+=$n}END{for(n=1;n<=NF;n++)printf t[n]" ";print"\n"}'

2、求某一列的和:

[linux@test /tmp]$ awk '{sum += $1};END {print sum}' test
      

3、求某一列滿足某些條件的和:

[linux@test /tmp]$ awk '/aaa/ {sum += $2};END {print sum}' test
舉例:對于11 1 32 312 2 33 443 3 2  112 2 2  243 3 3  354 5 6  6使用 awk '/12/ {sum += $2};END {print sum}' 結果為4。含義----求滿足每行裡有字元12的所有第二列的和      

4、比較完整的一個例子:

awk -F ','  'BEGIN{sum=0 ;count=0}{if ($(NF-11) == 2 && $NF == 0 && $3 == "1.6.1_1_1") {sum +=$5; count++;} } END {print "sum="sum" count="count " avg="sum/count}'

說明:

BEGIN{sum=0 ;count=0} 初始化計數器;

END {print "sum="sum" count="count " avg="sum/count} 列印彙總,計數器和均值;

if ($(NF-11) == 2 && $NF == 0 && $3 == "1.6.1_1_1") {sum +=$5; count++;} 判斷倒數第11個字段,判斷倒數第一個字段,判斷第三個字段(字元串) 第五個字段彙總累加,計數器累加

$NF 可用來表示一個記錄的最後一個欄位

NF表示目前行的字段數,$0表示目前行

關于多個分割符号:

1、awk -F ',' 表示使用逗号多分隔符   

2、awk -F 'AB' 表示使用符号AB做分隔符 echo ABCDABDDCADAFB  | awk -F 'AB' '{for(i=1;i<=NF;i++)printf $i" "}'輸出 CD DDCADAFB

3、awk -F '[AB]' 表示使用A或者B做分隔符,就是遇到字元A或者B都分割 echo ABCDABDDCADAFB  | awk -F '[AB]' '{for(i=1;i<=NF;i++)printf $i" "}' 輸出  CD  DDC D F

4、awk -F '[\\|]' 表示使用符号‘|’做分隔符,這裡有兩層轉義,先轉義\,然後轉義|。

5、echo "ABC|DAB|DD CA DAFB"  | awk -F '[ \\|]' '{for(i=1;i<=NF;i++)printf $i" "}' 輸出 ABC DAB DD CA DAFB

6、print列印會換行,printf列印不換行