Linuxで作業をしていると、ログの確認やCSVファイルの整形、特定の情報の抽出など、テキスト処理が頻繁に求められます。そんなときに便利なのが「awk」というコマンドです。awkは、テキストデータの中から必要な部分を抽出したり、条件に応じて出力を変えたりすることができる、非常に柔軟で強力なツールです。本記事ではawkの基本的な使い方から、実際の使用例を丁寧に解説します。Linuxを日常的に使っている方や、テキスト処理を効率化したい方におすすめの内容です。
awkは、C言語のような構文を持ったテキスト処理専用のプログラミング言語であり、主にLinuxやUnix環境で使用されます。その名前は開発者であるAho、Weinberger、Kernighanの頭文字をとったものです。
awkは主に以下のような用途に使われます。
awkは「1行ずつ処理して、必要な条件にマッチしたら何かを実行する」という設計思想のもとで動作します。
awkコマンドの基本的な書き方は以下の通りです。
awk 'パターン { アクション }' ファイル名
たとえば、以下のようなCSVファイルがあったとします。
csvコピーする編集する名前,年齢,職業
田中,30,エンジニア
佐藤,25,デザイナー
鈴木,35,マネージャー
このファイルから、名前だけを表示したい場合は次のように書きます。
awk -F',' '{ print $1 }' sample.csv
-F','
:カンマを区切り文字として指定$1
:1列目(名前)このように、awkでは$1
, $2
, $3
…といった変数を使って、各列にアクセスできます。
awkの真価は、条件分岐を用いて出力をコントロールできる点にあります。
たとえば、30歳以上の人だけを表示したい場合は以下のように書きます。
awk -F',' '$2 >= 30 { print $1, $2 }' sample.csv
結果:
田中 30
鈴木 35
このように、特定の条件に合致した行だけを処理・出力できます。
awkでは、全体の処理の前に実行したい処理(初期化など)をBEGIN
、すべての行を処理し終えた後に実行したい処理をEND
に記述することができます。
awk 'BEGIN { print "出力開始" } { print $0 } END { print "出力終了" }' sample.csv
出力:
出力開始
名前,年齢,職業
田中,30,エンジニア
佐藤,25,デザイナー
鈴木,35,マネージャー
出力終了
この構文は、集計処理や処理のログ表示などに非常に便利です。
デフォルトでは、awkは空白やタブを区切り文字としていますが、-F
オプションで任意の区切り文字を指定することができます。また、出力時の区切り文字もOFS
(Output Field Separator)で変更できます。
awk -F',' 'BEGIN { OFS="\t" } { print $1, $2 }' sample.csv
これは出力をタブ区切りにして表示する例です。
awkでは数値の集計も簡単に行えます。たとえば、年齢の合計や平均を求めるには以下のように書けます。
awk -F',' 'NR > 1 { sum += $2 } END { print "合計年齢:", sum, "平均年齢:", sum / (NR -1) }' sample.csv
NR > 1
:1行目(ヘッダー)を除外sum += $2
:2列目の年齢を加算NR
:現在の行番号(全体行数)結果:
合計年齢: 90 平均年齢: 30
awkでは、特定の文字列を含む行を抽出するのも得意です。
awk '/エンジニア/' sample.csv
これは「エンジニア」という文字列を含む行を出力します。
また、正規表現と条件を組み合わせることも可能です。
awk -F',' '$3 ~ /ジニア/ { print $1 }' sample.csv
結果:
コピーする編集する田中
awkは一行コマンドだけでなく、スクリプトファイルとして記述することも可能です。
#!/usr/bin/awk -f
BEGIN {
FS=","
print "名前と職業"
}
{
print $1, "-", $3
}
このようなスクリプトをmyscript.awk
として保存し、以下のように使います。
awk -f myscript.awk sample.csv
スクリプト形式にすることで、複雑な処理も見通し良く記述できます。
以下にawkを活用したいくつかの実用的な例を紹介します。
awk '{ print $1 }' access.log | sort | uniq -c | sort -nr
これは、ログの先頭にあるIPアドレスをカウントして、多い順に並べる処理です。
free -m | awk '/Mem:/ { print "使用中: " $3 "MB / 合計: " $2 "MB" }'
awkは、Linuxにおけるテキスト処理の頼れる味方です。シンプルなコマンドから複雑な集計処理まで、柔軟に対応できる点が大きな魅力です。覚えるのが難しそうに感じるかもしれませんが、基本的な使い方さえ押さえれば、業務の効率化に大いに役立ちます。
まずは「特定の列を表示する」「条件を指定して抽出する」といった基本操作から始め、少しずつスクリプト化や集計処理にチャレンジしてみてください。きっとawkの便利さを実感できるはずです。