1

現在、次のようなリモートシェルコマンドを実行するコードのセクションを含むシェルスクリプトがあります。

grep -v "^[     ]*#" ${CONFIG_FILE} |
while read SERVER USER LOGDIR
do
{
echo "Stats for" $date
echo "${USER}"
echo "iTunes:"
time /bob/shared/ted/remote/rssh ${SERVER} "gzgrep -c \"iTunes Music\" ${LOGDIR}/*${date}*.gz | awk '-F:' '{total+=\$NF}END{print \"Total=\" total}'" 2>&1
echo
echo "Default"
time /bob/shared/ted/remote/rssh ${SERVER} "gzgrep -c \"Default Player\" ${LOGDIR}/*${date}*.gz | awk '-F:' '{total+=\$NF}END{print \"Total=\" total}'" 2>&1
echo
echo "The Rest"
time /bob/shared/ted/remote/rssh ${SERVER} "gzgrep -c \"Junk\"     ${LOGDIR}/*${date}*.gz | awk '-F:' '{total+=\$NF}END{print \"Total=\" total}'" 2>&1
} </dev/null 2>&1

done 2>${ERROR_FILE} >${STATS_FILE}

次のような出力が得られます。

Stats for 20120628
Rich
iTunes:
Total=0

real 0m2.09s
user 0m0.22s
sys  0m0.03s

Default:
Total=0

real 0m2.03s
user 0m0.23s
sys 0m0.00s

The Rest:
Total=0

real 0m2.03s
user 0m0.23s
sys 0m0.00s

Stats for 20120628
Ian
iTunes:
Total=2

real 0m21.44s
user 0m0.22s
sys 0m0.00s

Default:
Total=2

real 0m21.48s
user 0m0.21s
sys 0m0.02s

The Rest:
Total=0

real 0m2.03s
user 0m0.23s
sys 0m0.00s

などなど...

私が欲しいのは、CSV形式で次のように出力することです:

Rich,0,0,0
Ian,2,2,0

必要な出力形式を取得するために上記のコードを変更する最も簡単な方法は何ですか?

ありがとう!

4

1 に答える 1

1
grep -v "^[     ]*#" ${CONFIG_FILE} |
while read SERVER USER LOGDIR
do
{
echo "${USER},"
time /bob/shared/ted/remote/rssh ${SERVER} "gzgrep -c \"iTunes Music\" ${LOGDIR}/*${date}*.gz | awk '-F:' '{total+=\$NF}END{print total \",\"}'" 2>&1
time /bob/shared/ted/remote/rssh ${SERVER} "gzgrep -c \"Default Player\" ${LOGDIR}/*${date}*.gz | awk '-F:' '{total+=\$NF}END{print total \",\"}'" 2>&1
time /bob/shared/ted/remote/rssh ${SERVER} "gzgrep -c \"Junk\"     ${LOGDIR}/*${date}*.gz | awk '-F:' '{total+=\$NF}END{print total}'" 2>&1
} </dev/null 2>&1 | tr -d '\n'

done 2>${ERROR_FILE} >${STATS_FILE}

余分なエコーを削除し、カンマを追加して、1 行にまとめました。それを試してみてください。

タイミング情報も必要ない場合は、すべてのtime呼び出しを削除してください。

于 2012-07-02T16:56:10.257 に答える