## はじめに
awkは行と列(フィールド)を扱うことに特化した、ミニプログラミング言語的なテキスト処理ツールです。ログから特定列を取り出す、合計や平均を計算する、条件付きで整形するといった処理が一行で実現できます。
grepが「行の抽出」、sedが「文字列の置換」を得意とするのに対し、awkは「列の抽出と計算」が得意です。
## 手順・設定方法
### ステップ1: 基本構文とフィールド指定
“`bash
echo “alice 25 engineer” | awk ‘{print $1, $3}’
awk -F: ‘{print $1}’ /etc/passwd
“`
### ステップ2: パターンと条件処理
“`bash
awk ‘/error/ {print $0}’ app.log
awk ‘$9 >= 500 {print $1, $7, $9}’ access.log
awk ‘NR >= 10 && NR <= 20' file.txt
awk 'BEGIN{print "=== Report ==="} {print} END{print "Total:", NR}' file.txt
```
### ステップ3: 集計・計算
```bash
ls -l | awk '{sum += $5} END {print "Total bytes:", sum}'
awk '{sum += $NF; count++} END {print "Avg:", sum/count}' response.log
awk '{count[$9]++} END {for (s in count) print s, count[s]}' access.log
```
### ステップ4: 実践的なログ解析
```bash
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
awk '$9 ~ /^[45]/ {print $9, $7}' access.log | sort | uniq -c | sort -rn
ps aux | awk 'NR>1 {mem[$11]+=$6} END {for (p in mem) print mem[p], p}’ | sort -rn | head
“`
## まとめ
1. **フィールド指定**: `$1`〜`$N` で列、`$NF` で最終列
2. **区切り文字**: `-F` で指定(`:` `,` `\t` など)
3. **条件処理**: `pattern {action}` の形式で行を選別
4. **集計**: 連想配列 `count[$1]++` でカウント
5. **BEGIN/END**: 処理前後にヘッダーやサマリーを出力可能




