私の変数は次のとおりです。
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
が入力にありませんので説明してください。また、コードを複数の環境変数に分割する複雑なソリューションを構築する理由も説明してください。