次のスクリプトを理解する必要があります。
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
に問題がありますHEADERIZE
。PRINTF
これがどのように機能するか。
答え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
します。AWK
echo
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