シェルワンライナー #8
問題
183.YY.129.XX - - [07/Nov/2017:22:37:38 +0900] ...
こういう入力で午前と午後の行を数える
回答
cat access.log | awk '{split($4,a,":"); print a[2]}' | awk '{if($1>=0 && $1<12) am++; else pm++; } END{print "AM:" am ", PM:" pm}'
出力結果
AM:2, PM:3
- $4をsplitで”:”で区切って配列に入れる。
- 時間の要素のみ出力
- 0-11だったら AM, 12-23だったらPMでカウント
- AM: x 行、PM: y みたいな感じで出力
補足
- テキストに似た答えはなかった。
- テキスト答えは
awk -F:
でコロンを空白に置き換える$(NF-2)
で列数 - 2 即ち 後ろから3つ目で時間部分を抽出し出力- それをawkのフィルタで午前、午後の条件、アクションを条件に応じて「午前」or「午後」と出力
- その出力結果を sort
- その出力結果を uniq -c で集計して出力