【オーク】

awk とは?

💡 テキストの表計算マシン、欲しい列だけサクッと抜き出す職人技
📌 このページのポイント
awk — テキストを列単位で処理 入力テキスト 田中 営業 85 佐藤 開発 92 鈴木 営業 78 高橋 開発 88 $1 $2 $3 awk awk '$2=="開発" {print $1,$3}' 出力結果 佐藤 92 高橋 88 $1 $3 のみ抽出 awkの基本構造: パターン { アクション } 条件に合う行だけを選び、指定した列を取り出す $1=1列目, $2=2列目... / $0=行全体 / NR=行番号
awkのイメージ
ひよこ ひよこ

awkって変わった名前だけど、何をするコマンドなの?

ペンギン先生 ペンギン先生

テキストファイルを「列」単位で処理するコマンドだよ。たとえばExcelで「B列だけコピーしたい」って思うことあるよね?awkはそれをコマンド一発でやってくれるんだ

ひよこ ひよこ

列を取り出すだけなの?

ペンギン先生 ペンギン先生

いやいや、それは基本中の基本だよ。条件を付けて「3列目が100以上の行だけ表示」とか、「5列目の数値を全部合計」みたいな集計もできるんだ。`awk '$3 > 100 {print $1, $3}' data.txt` みたいに書くよ

ひよこ ひよこ

sedgrepとはどう違うの?

ペンギン先生 ペンギン先生

grepは「行を検索」、sedは「行を置換」、awkは「列を操作」って覚えるといいよ。awkは表形式のデータを扱うのが得意で、スペースやタブで区切られたデータを自動的に列に分解してくれるんだ

ひよこ ひよこ

ログの解析とかにも使えるのかな?

ペンギン先生 ペンギン先生

まさにawkの得意分野だね!たとえばアクセスログからIPアドレスだけ抜き出すなら `awk '{print $1}' access.log` で一発。パイプでsortやuniqとつなげば、アクセス数ランキングも簡単に作れるよ

ひよこ ひよこ

awkって実はプログラミング言語でもあるって聞いたけど本当なの?

ペンギン先生 ペンギン先生

本当だよ。変数、配列、関数、ループ条件分岐まで全部使える立派なプログラミング言語なんだ。BEGIN/ENDブロックでヘッダーやフッターの処理もできるし、連想配列を使えばデータの集約処理も書ける。ただ、あまり複雑になるならPythonに切り替えた方がいいけどね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「awk」って出てきたら「テキストを列単位で切り出して処理するコマンド」と思えればだいたいOK!
📖 おまけ:英語の意味
「AWK (Aho, Weinberger, Kernighan)」 = 開発者3人の頭文字
💬 Aho、Weinberger、Kernighanという3人の天才プログラマの頭文字を取った名前だよ。1977年にBell研究所で生まれた歴史あるツールなんだ
← 用語集にもどる