awkコマンドの使い方:列指向でテキストを処理する

awkは、テキストを空白などで区切って「列」として扱い、条件に合う行の抽出や、列ごとの集計を行うコマンドです。ログやコマンド出力から特定の列だけ取り出す場面でよく使います。

awkのよく使う形

実務や学習で登場しやすい使い方を、そのまま入力できる形でまとめました。

コマンド例内容
awk '{print $1}' file各行の1列目を表示
awk -F: '{print $1}' /etc/passwd区切り文字を:に指定して1列目を表示
awk '$3 > 100' file3列目が100より大きい行を表示
awk '{sum += $2} END {print sum}' file2列目の合計を計算して表示
df -h | awk 'NR>1 {print $5, $6}'他のコマンドの出力から使用率とマウント先を抜き出す
awk '/error/ {print $0}' app.log「error」を含む行を表示

awkの主なオプション

オプション意味
{print $1} 列を指定
-F区切り文字を指定
BEGIN{...}・END{...} 処理前後に実行
-v変数に値を代入

awkの実行例と結果の読み方

user@linux-study:~$ awk -F: '{print $1}' /etc/passwd
root
daemon
user

awk -F: '{print $1}'で、/etc/passwdを「:」区切りで分割し、各行の1列目(ユーザー名)だけを取り出して表示しています。cutと似ていますが、awkはより複雑な条件処理も可能です。

練習用ターミナルでは、awkをブラウザ上で安全に試せます。

awkを使うときの注意点

$0は行全体、$1・$2…は各列、NFは列の数、NRは行番号を表します。$NFと書くと、行の最後の列を取れます。

シェルの中でawkのプログラムを書くときは、全体をシングルクォートで囲みます。ダブルクォートだと$1がシェルの変数として先に展開されてしまいます。

awkに関するよくある質問

cutとの違いは?

cutは区切り文字が固定の単純な列抽出向きです。連続するスペースの扱いや、条件・計算が必要なときはawkが向いています。

カンマ区切りのCSVを扱うには?

awk -F, '{print $2}' file.csvのように区切り文字を指定します。引用符の中にカンマがあるCSVは、専用ツールのほうが確実です。

関連ページ

あわせて覚えたいコマンド:sed・grep・cut・sort

awkが登場する章:中級 第7章

← Linuxコマンド一覧へ戻る