技術系TIPS
PR

awkで各行の特定の列項目の数値を足し合わせる

saratogax
記事内に商品プロモーションを含む場合があります

以下は特定のタイミングの nginx の pod のリソース。

kubectl top pods した結果で、CPU と memory のリソースがリスト化されている。

NAME                   CPU(cores)   MEMORY(bytes)   
nginx-cb8bbf5f6-9mpx2  4m           651Mi           
nginx-cb8bbf5f6-ccwvf  3m           641Mi           
nginx-cb8bbf5f6-q9trz  3m           636Mi           
nginx-cb8bbf5f6-zzsbx  4m           641Mi

この程度ならパッと見で CPU と memory の合算も可能。

ただ、数が多いと大変ですよね。

今回は、このようなテキスト出力されたものの合計値を aws で手軽に計算します。

CPUの合計

冒頭のリストが出力されているファイルを「log.txt」とします。

CPU は 2 列目なので、以下のように 2 列目を合計して単位の「m」を追記すれば OK ですね。

$ awk '{t += $2} END {print t"m"}' log.txt

14m

メモリの合計

メモリも同じ考え方でいけます。

$ awk '{t += $3} END {print t"Mi"}' test.log

2569Mi

CPUとメモリを同時に計算

個別にやるのは面倒なので、両方一緒に計算して表示させたいですよね。

$ awk '{c += $2; m += $3} END {print c"m",m"Mi"}' test.log

14m 2569Mi

まとめ

スプレッドや Excel に貼り付けて計算させてもいいですが、ちょっとしたものならコマンドラインでサクッとやってしまいたいですね。

今回は aws が都合のいいように、ヘッダ行の値や各明細の単位を無視して計算してくれました。

最初、4m とか 651Mi とか単位がついていると無理かなと思ったのですけどね・・・。

ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました