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
alice

UID(3 列目)が 1000 以上の、人のために作ったユーザーだけを出します。

$ df -h | awk 'NR > 1 {print $5, $6}'

1 行目の見出しを飛ばし、使用率とマウント先だけを出します。NR は今の行の番号です。

$ awk '{sum += $2} END {print sum}' sales.txt

2 列目の数を全部足して、最後に合計を出します。END は全部読み終えたあとにする処理です。

$ ps aux | awk '{print $NF}'

$NF は最後の列です。列の数が行によって違っても、最後の列を取り出せます。

よくある間違い・注意

  • プログラムは '…'(シングルクォート)で囲みます。"…" で囲むと、$1 がシェルの変数として先に置き換わってしまいます。
  • 列は 1 から数えます。$0 は行全体です。

実際に打って練習する

Linux レベル1 コースの Lv23「列を操る awk」で覚えます(第2章 宝探し(検索とテキスト処理))。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

Lv1〜16 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。

Linux コマンド一覧(LinuC レベル1 の範囲)へ戻る