awk の使い方
列を取り出す・集計する
書き方
awk [-F 区切り] 'パターン { 処理 }' [ファイル]$1 $2 は列、$NF は最後の列、NR は行番号。{ count[$1]++ } のように集計もできます。
よく使うオプション
| オプション | 意味 |
|---|---|
-F 区切り | 列の区切りの文字(-F: や -F, など。既定は空白とタブ) |
-v 名前=値 | awk の中で使う変数を外から渡す |
例
$ awk '{print $1}' access_log空白で区切った 1 列目を出します。Apache のアクセスログでは、相手の IP アドレスです。
$ awk -F: '$3 >= 1000 {print $1}' /etc/passwdec2-user
aliceUID(3 列目)が 1000 以上の、人のために作ったユーザーだけを出します。
$ df -h | awk 'NR > 1 {print $5, $6}'1 行目の見出しを飛ばし、使用率とマウント先だけを出します。NR は今の行の番号です。
$ awk '{sum += $2} END {print sum}' sales.txt2 列目の数を全部足して、最後に合計を出します。END は全部読み終えたあとにする処理です。
$ ps aux | awk '{print $NF}'$NF は最後の列です。列の数が行によって違っても、最後の列を取り出せます。
よくある間違い・注意
- プログラムは '…'(シングルクォート)で囲みます。"…" で囲むと、$1 がシェルの変数として先に置き換わってしまいます。
- 列は 1 から数えます。$0 は行全体です。
実際に打って練習する
Linux レベル1 コースの Lv23「列を操る awk」で覚えます(第2章 宝探し(検索とテキスト処理))。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
Lv1〜16 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。