awkコマンドのENDブロックでFORループを使用する

awkコマンドのENDブロックでFORループを使用する

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同じ構文がまったくありません。awkdodo statement while (condition)

中かっこを使用する必要があります。

for (date in freq) { cmd1; cmd2; cmd3; }

おすすめ記事