Corredor

ウェブ、プログラミングの勉強メモ。

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

以上〜。

難読化シェル芸の世界 (プレミアムブックス)

難読化シェル芸の世界 (プレミアムブックス)

  • 作者:kanata
  • 発売日: 2019/04/24
  • メディア: Kindle版