1日の平均ファイル数を取得しようとしています。
次のスクリプトが機能します。
#!/bin/sh
ls -l | grep "^-" | awk '{
key=$6$7
freq[key]++
}
END {
for (date in freq)
printf "%s\t%d\n", date, freq[date]
}'
次のようにforループにdoとdoneを追加すると、
#!/bin/sh
ls -l | grep "^-" | awk '{
key=$6$7
freq[key]++
}
END {
for (date in freq)
do
printf "%s\t%d\n", date, freq[date]
done
}'
次のエラーが発生します。
awk: cmd. line:8: done
awk: cmd. line:8: ^ syntax error
awkコマンドのENDブロック内に複数行のforループステートメントを作成するには?
解決策:
awkコマンドのENDブロックでforループを開始および終了するには、{と}を使用する必要があります。
#!/bin/sh
ls -l | grep "^-" | awk '{
key=$6$7
freq[key]++
}
END {
for (date in freq)
{
count=count+1
total=total+freq[date];
printf "%s\t%d\n", date, freq[date]
}
printf "Average files per day : %d\n",(total/count)
}'
ベストアンサー1
done
同じ構文がまったくありません。awk
do
do statement while (condition)
中かっこを使用する必要があります。
for (date in freq) { cmd1; cmd2; cmd3; }