【オーク】

awk とは?

最終更新:
💡 条件で選び、列を取り出して集計する

パターンに合う入力に処理を行う、テキスト処理の言語兼コマンド。通常は行を読み、フィールド(列)の抽出、条件による絞り込み、数値の集計などを行う。区切り文字やCSVへの対応は設定・実装を確認する。

📌 このページのポイント
条件で選び、必要な列を出力入力:名前・部署・数値田中 営業 85佐藤 開発 92鈴木 営業 78高橋 開発 88出力:名前・数値佐藤 92高橋 882列目が「開発」なら、1・3列目を出すawk '$2=="開発" {print $1,$3}'$1、$2…は列 / $0はレコード全体この例は空白区切り。CSVの解析とは別
空白区切りの独自入力例に条件を適用した結果。矢印は入力から出力への処理方向です。引用符や改行を含むCSVを単純なカンマ区切りで扱えるという図ではありません。
ひよこ ひよこ
awkって何をするコマンドなの?
ペンギン先生 ペンギン先生
条件に合うテキストを選んで処理するコマンドで、言語でもあるよ。通常は行ごとに読み、空白で区切られたフィールドを列のように扱う。列の抽出だけでなく、計算や集計もできるんだ
ひよこ ひよこ
どうやって列を取り出すの?
ペンギン先生 ペンギン先生
`awk '{print $1}' data.txt` なら1列目を出力する。`$2`は2列目、`$0`は入力のレコード全体だよ。`awk '$3 > 100 {print $1, $3}' data.txt` は3列目を数値として比較する想定で、100より大きい行の1・3列目を出す例なんだ
ひよこ ひよこ
列の区切りは変えられる?
ペンギン先生 ペンギン先生
`-F`で変えられるよ。例えば `awk -F ',' '{print $2}' data.txt` はカンマで分けて2列目を出す。ただし、引用符内にカンマや改行があるCSVをこれだけで正しく解析できるとは限らない。CSVモードに対応した実装・版や専用の読み取り機能を確認するんだ
ひよこ ひよこ
ログからIPアドレスも抜ける?
ペンギン先生 ペンギン先生
IPアドレスが1列目の形式なら `awk '{print $1}' access.log` で取り出せるよ。ログの形式によって列の位置は変わる。grepは行の検索、sedは文字列の置換、awkは列と計算が得意、という覚え方は入口になるけれど、役割はそれぞれ重なるんだ
ひよこ ひよこ
全行の合計もできる?
ペンギン先生 ペンギン先生
1列目が数値の入力なら `awk '{sum += $1} END {print sum}' data.txt` が合計の例だよ。BEGINは入力を読む前、ENDは読み終えた後に実行する。条件分岐、ループ、配列、関数も使える。番号NRは処理したレコード数で、通常の行単位の入力では行番号のように使えるんだ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「awk」って出てきたら「条件でテキストを選び、列の抽出や集計をするコマンド」と思えばだいたいOK!
📖 おまけ:英語の意味
「AWK (Aho, Weinberger, Kernighan)」 = 開発者3人の名前に由来
💬 Alfred Aho、Peter Weinberger、Brian Kernighanの名前に由来するよ。条件と処理を組み合わせてテキストを扱う言語なんだ

参考資料

← 用語集にもどる