導入
最後は、これまでの部品を1本のコマンド(ワンライナー)に組み上げます。パイプは「左から右へデータを加工していく組み立てライン」。頭の中で工程を並べれば、複雑そうな集計も自然に書けます。
説明
ワンライナーは、いきなり全部書こうとせず左から一段ずつ足して確かめるのがコツです。たとえばアクセスログのステータス集計をレポート化する流れは、こう育てます。
- まず列を取り出す:
cut -d " " -f 4 logs/access.log - 並べて数える:
... | sort | uniq -c - 多い順にする:
... | sort -rn - ファイルに残す:
... > report.txt
完成形がこれです。実行してから cat で結果を確認します。
cut -d " " -f 4 logs/access.log | sort | uniq -c | sort -rn > report.txt
cat report.txt
同じ発想で、「WARN と ERROR だけを抜いて件数を出す」も書けます。
grep -v INFO logs/app.log | wc -l
覚えておきたい“型”はこの2つです。応用の9割はこの組み合わせで足ります。
- 集計の型:
cut ... | sort | uniq -c | sort -rn(列を取り出して多い順に数える) - 調査の型:
grep 条件 ファイル | wc -l(条件に合う件数を数える)
やってみよう
完成形をいきなり打つのではなく、cut -d " " -f 4 logs/access.log から始めて、| sort、| uniq -c、| sort -rn と一段ずつ足しながら出力の変化を観察しましょう。最後に > report.txt で保存し、cat report.txt で確認してください。
演習
logs/access.log のステータスコード(4列目)ごとの件数を多い順に集計し、その結果を report.txt に保存してください。
ヒント1を見る
集計の型 cut ... | sort | uniq -c | sort -rn の最後に > report.txt を足します。
ヒント2を見る
cut -d " " -f 4 logs/access.log | sort | uniq -c | sort -rn > report.txt
ヒント3を見る
保存できたか cat report.txt で確かめましょう。