df コマンドの結果を JSON 形式に変換する
ディスク使用量が分かる df コマンドの結果を JSON で処理したいなと思い、調べたら awk で JSON 変換するスクリプトがあったので、それをちょっと加工して自分用に作ってみた。
\df -P \
| tail -n +2 \
| awk '
BEGIN {
printf "{\n";
printf " \"volumes\": [\n";
}
{
if(a) printf ",\n";
printf " {\n";
printf " \"filesystem\": \""$1"\",\n";
printf " \"size\" : \""$2"\",\n";
printf " \"used\" : \""$3"\",\n";
printf " \"available\" : \""$4"\",\n";
printf " \"capacity\" : \""$5"\",\n";
printf " \"mounted_on\": \""$6"\"\n";
printf " }";
a++;
}
END {
printf "\n";
printf " ]\n";
printf "}";
}
' \
| jq '.'
dfコマンドには-hオプションを付けたモノなどをエイリアスを用意していることが多いので\dfとバックスラッシュを付与してエイリアスを無効にしておくdf -Pは POSIX 準拠な出力形式にするモノ。おおよそ Linux 系でも MacOS でも同じような形式にできるから指定しておく- お好みで
df -hPとすれば見やすいバイトサイズで表示する tail -n +2で、1行目の見出し行を削るawkスクリプトは以下を参考にした- 末尾に
jqへのパイプを用意したが、コレがなくてもインデントと改行はイイカンジに入れてある
awk の printf を1つにまとめたり、改行やスペースを除去すれば無理やりワンライナーにできなくもないが、こんな awk を書くならワンライナーにしなくてもいいかなと思った。w
以上〜。