このCPU使用率スクリプトについて

このCPU使用率スクリプトについて

次のスクリプトを理解する必要があります。

HEADER='CPU    pctUser    pctNice  pctSystem  pctIowait    pctIdle'

HEADERIZE="BEGIN {print \"$HEADER\"}"

PRINTF='{printf "%-3s  %9s  %9s  %9s  %9s  %9s\n", cpu, pctUser, pctNice, pctSystem, pctIowait, pctIdle}'

CMD='sar -P ALL 1 1'

FORMAT='{cpu=$3; pctUser=$4; pctNice=$5; pctSystem=$6; pctIowait=$7; pctIdle=$NF}'

FILTER='/Average|Linux|^$|%/ {next} (NR==1) {next}'


$CMD | tee $TEE_DEST | $AWK "$HEADERIZE $FILTER $FORMAT $PRINTF"  header="$HEADER"

echo "Cmd = [$CMD];  | $AWK '$HEADERIZE $FILTER $FORMAT $PRINTF' header=\"$HEADER\"" >> $TEE_DEST

このスクリプトは実際にCPU使用率(sarを使用)を確認し、その値を印刷するために使用されます。理解HEADERに問題がありますHEADERIZEPRINTFこれがどのように機能するか。

答え1

スクリプトを書く人は、出力の外観とスクリプトの機能を決定するすべてをより簡単に見ることができます。彼らはあなたをより簡単にしないようです:).

awkの仕組みを理解したら(Googleで検索または読んでくださいman awk)、一連の作業が必要であることがわかります。模様 { 氏名.... }(単純すぎる) とHEADER同じ名前HEADERIZEは、スクリプトの先頭に値が割り当てられ、後で値が使用されるシェル変数で、前に "$" が付けられます。その$AWK "$HEADERIZE行に見えますか?スクリプトはawkを実行します(おそらく他の場所では、awk変数はこれに似ていると定義されていますawk/usr/bin/awk。 awkの引数は、空でない2行目で定義されているようにHEADERIZE変数の値で始まります。したがって、その行は実際には次のように読み込まれます(AWK変数が次のように定義されていると仮定awk)。

awk "BEGIN {print "$HEADER"}" 

など。

これらすべてがどのように機能するかを理解するには、次のようなものを使用するように変数を変更またはechoオーバーライドawkします。AWKecho

export AWK=echo

そしてスクリプトを再実行してください。に渡されるコマンドラインを表示できますawk

下部に2つのコマンドがあるのは、TEE_DESTこのスクリプトを実行すると、変数値という出力ファイルに2つのエントリが含まれるためです。 1つは、変数実行コマンドラインの出力が、名前付きCMDファイルに保存され、出力が表示されるコマンド$TEE_DESTに渡される最初のコマンドで始まることです。awk端末。次に、2番目のecho文字列をスクリプトに入れ、Cmd = [$CMD]そのawkスクリプトの出力もファイルに追加します。$TEE_DEST

VARIABLE以下を使用して、名前付き各変数の値を簡単に見つけることができます。

echo $VARIABLE

これにより、スクリプトの一部を実行し、内容を端末ウィンドウに貼り付けて調べることができます。私はこれがスクリプトを学ぶ良い方法であることがわかりました。

欲しいなら置くAWK変数の値を次に上書きすることで、上記のように実行できますecho

export VARIABLE=new value for the variable

関連情報