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 '.'

awk の printf を1つにまとめたり、改行やスペースを除去すれば無理やりワンライナーにできなくもないが、こんな awk を書くならワンライナーにしなくてもいいかなと思った。w

以上〜。