
ここに私の変数があります:
HEADER='Device bps tps bread bwrtn'
HEADERIZE="BEGIN {print \"$HEADER\"}"
PRINTF='{printf "%-10s %11s %11s %12s %12s %13s %13s %13s\n", device, bps, tps, bread, bwrtn}'
CMD='iostat -DlR 1 2'
FILTER='/^cd/ {next} /^Disks:/ {reportOrd++; next} (reportOrd<2) {next}'
FORMAT='{device=$1; bps="?"; tps="?"; bread=$5; bwrtn=$6}'
$CMD | awk "$HEADERIZE $FILTER $FORMAT $PRINTF" header="$HEADER"
出力は次のようになります。
Device bps tps bread bwrtn
hdisk0 0.0 0.0 0.0 0.0
hdisk1 0.0 0.0 0.0 0.0
hdisk2 0.0 0.0 0.0 0.0
hdisk3 0.0 0.0 0.0 0.0
もちろん、パフォーマンス ヘッダーをもっと増やしたいのですが、シンプルさを維持するようにしています。
問題は、次を実行したときに発生します$CMD | awk "$HEADERIZE $FILTER $FORMAT $PRINTF" header="$HEADER"
。次のように出力されます。
Device bps tps bread bwrtn
--------------- ? ? --------------------------------------
%tm ? ? bwrtn rps
act ? ? outs serv
hdisk1 ? ? 0.0 0.0
hdisk0 ? ? 0.0 0.0
変数「FILTER」が間違っていると思いますが、正しい構文がわかりません。
入力は次のとおりです:iostat -DlR 1 2
出力:
root@myserver #iostat -DlR 1 2
System configuration: lcpu=20 drives=2 paths=16 vdisks=0
Disks: xfers read write queue
--------------- -------------------------------- ------------------------------------ ------------------------------------ --------------------------------------
%tm bps tps bread bwrtn rps avg min max time fail wps avg min max time fail avg min max avg avg serv
act serv serv serv outs serv serv serv outs time time time wqsz sqsz qfull
hdisk1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.0 0.0 0.0 0.0 0 0 0.0 0.0 0.0 0.0 0.0 0.0
hdisk0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.0 0.0 0.0 0.0 0 0 0.0 0.0 0.0 0.0 0.0 0.0
Disks: xfers read write queue
--------------- -------------------------------- ------------------------------------ ------------------------------------ --------------------------------------
%tm bps tps bread bwrtn rps avg min max time fail wps avg min max time fail avg min max avg avg serv
act serv serv serv outs serv serv serv outs time time time wqsz sqsz qfull
hdisk1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.0 0.0 0.0 0.0 0 0 0.0 0.0 0.0 0.0 0.0 0.0
hdisk0 0.0 77.8K 19.0 0.0 77.8K 0.0 0.0 0.0 0.0 0 0 19.0 0.3 0.2 0.5 0 0 0.0 0.0 0.0 0.0 0.0 0.0
Desired output:
Device bps tps bread bwrtn
hdisk0 0.0 0.0 0.0 0.0
hdisk1 0.0 0.0 0.0 0.0
hdisk2 0.0 0.0 0.0 0.0
hdisk3 0.0 0.0 0.0 0.0
答え1
解決:
iostat -d 1 2 | awk 'BEGIN{print "Device\tbps\ttps\tbread\tbwrtn"}/^hdisk/{print $1"\t"$3"\t"$4"\t"$5"\t"$6}'
出力:
Device bps tps bread bwrtn
hdisk1 0.0 0.0 0.0 0.0
hdisk0 0.0 0.0 0.0 0.0
hdisk1 0.0 0.0 0.0 0.0
hdisk0 77.8K 19.0 0.0 77.8K
コメント:
大変複雑に考えすぎているようです。提案された解決策は、入力サンプルと希望する出力に基づいた推測であり、矛盾がいくつか生じています。 と のデータは入力には存在しないため、どこから来たのか説明してくださいhdisk2
。hdisk3
また、コードを複数の環境変数に分割する、このような複雑な解決策を構築する理由も説明してください。