フラグを使用して awk を使用して iostat 出力を処理する方法

フラグを使用して awk を使用して iostat 出力を処理する方法

ここに私の変数があります:

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

コメント:

大変複雑に考えすぎているようです。提案された解決策は、入力サンプルと希望する出力に基づいた推測であり、矛盾がいくつか生じています。 と のデータは入力には存在しないため、どこから来たのか説明してくださいhdisk2hdisk3また、コードを複数の環境変数に分割する、このような複雑な解決策を構築する理由も説明してください。

関連情報