Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題49

問題49 CPU負荷の調査2

問題のファイルは

https://github.com/shellgei/shellgei160

からダウンロードできる。

ログファイルをうまく整形して必要なデータを取り出す問題だった。今回も思いつかなかった。

解答例は

cat top.log | grep -E '^ *[0-9]+' | awk '{x=$9;for(i=1;i<12;i++)$i="";a[$0]+=x}END{for(k in a)print a[k],k}' | sort -k1,1nr | head -n 1

となる。ログのヘッダ部を grep でうまく除去している。ヘッダ部は行頭に空白と数字の組が来ないことを生かしている。レコード部に関してはawk で9列目を退避させてから11列目までを削除して行全体を指定するという手順で12列目以降のコマンドをうまく抜き出していた。うまい考え方だなと感心した。