若您常常需要寫shell script來幫助自己工作,那麼awk絕對不能少,當然今天我不是來介紹awk的基本運用的,老實說我會的也不是很多,我今天是針對我遇到的問題來備忘一下!

譬如說一個檔案abc
$ cat abc
1
2
3
4
5
6
7
8
9
10

若只是這樣的一個簡單檔案,簡簡單單還在能力範圍內我還可以加總和平均
加總
$ fmt -w 100 abc | awk '{ print $1+$2+$3+$4+$5+$6+$7+$8+$9+$10 }'
平均
$ fmt -w 100 abc | awk '{ print ($1+$2+$3+$4+$5+$6+$7+$8+$9+$10)/10 }'
但是我今天遇到的一個檔案有幾千幾萬行,這的確困擾我了,讓我一度困惑了幾十分鐘,好險google一直是我的好朋友,順利的找到了解決的方式,而且也發現會用這方法的人還真是厲害,我目前還是有看沒有懂的狀態,但是無論如何還是先紀錄一下來!

譬如說一個檔案def
$ cat def
1
2
3
~(省略)
2056
2057
2058

加總
$ awk '/nn/&&NR>1{print sum/i;sum=i=0}
> {sum+=$NF;i++}
> END{print sum}' def
2118711
平均
$ awk '/nn/&&NR>1{print sum/i;sum=i=0}
{sum+=$NF;i++}
END{print sum/i}' def
1029.5

這是我目前找到的解決方式囉!若各位高手有任何更好的建議也歡迎提供給我唷!非常感謝!

更多資訊請參考:
最新超值旗艦機開箱
比螺旋燈泡還省電的迷你 NAS
26800mAh筆電行動電源