1

bash スクリプトを使用して、/proc/diskstats からすべての物理ディスクを取得しようとしています

   8       0 sda 14256 20634 1376722 133628 279800 2362075 21135024 2133492 0 261052 2259536
   8       1 sda1 14105 20634 1375514 133520 279800 2362075 21135024 2133492 0 261036 2259432
   2       0 fd0 0 0 0 0 0 0 0 0 0 0 0

次のような形式で名前をエコーし​​ます。

{
  "data":[
  { "{#DISK}":"sda"},
  { "{#DISK}":"sdb"},
  ]
}

Linux 2.6 以降のシステムでサポートされるような方法でこれを実行しようとしています。また、ディスクの 11 フィールドではなく 4 フィールドを持つ diskstats に表示される可能性のあるパーティションを避けたいと考えています。

編集:

ディスク名を取得できます

cat /proc/diskstats | awk '{print $3}'

また

cat /proc/diskstats | head -1 | awk '{print $3}'

しかし、それを繰り返してフォーマットする方法がわかりません。

4

1 に答える 1

2

デバイス名に二重引用符が含まれていない場合(trollface.jpg)、これについてはawkに固執することができます。

BEGIN {
  print "{"
  printf "  \"data\": ["
  first=1
}

!first {
  printf ","
}

NF == 14 {
  printf "\n  { \"{#DISK}\":\""$3"\"}"
  first=0
}

END {
  print "\n  ]"
  print "}"
}
于 2012-09-18T19:13:57.923 に答える