(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Linux】数値データのパーセントタイルで値を切り出すスクリプト

スポンサーリンク

はじめに

Excelなどの表計算ソフトではデフォルトで入っているpercentileをLinuxで利用すべくスクリプトにしました。
方針としては数値データにて並び替えた上で行数を取得し、headとtailで切り出しています。

環境情報
  • Debian GNU/Linux 9

スクリプト

数値にて昇順/降順で並べ替え済みのデータをhoge.logとすると以下のように値を格納していきます。

num=0.05
lognum=`cat hoge.log | wc -l`
tileinfo=`echo "$lognum*$num" | bc | cut -d"." -f1`
if [ -z "$tileinfo" ]; then
tileinfo=0
fi
headtile=`echo "$lognum-$tileinfo" | bc `
tailtile=`echo "$headtile-$tileinfo" | bc `

同情報を利用して以下のようにすれば90%タイルでデータを切り出せます。

cat hoge.log |  head -n $headtile | tail -n $tailtile

行数情報なので小数点データは切り捨てていますが、その中でbcコマンドの仕様を考慮して値が空になった場合は0を明示的に挿入しています。

終わりに

numの部分を変更することで95%タイルや99%タイルなど、任意の値でログデータを切り出すことが可能です。
また、実際の値が知りたい場合はheadやtailコマンドを使うことで該当行が取り出せます。

以上、ご参考になれば幸いです。