Categories: linux

awkコマンド入門:Linuxでテキストを自在に操る強力なツール

Linuxで作業をしていると、ログの確認やCSVファイルの整形、特定の情報の抽出など、テキスト処理が頻繁に求められます。そんなときに便利なのが「awk」というコマンドです。awkは、テキストデータの中から必要な部分を抽出したり、条件に応じて出力を変えたりすることができる、非常に柔軟で強力なツールです。本記事ではawkの基本的な使い方から、実際の使用例を丁寧に解説します。Linuxを日常的に使っている方や、テキスト処理を効率化したい方におすすめの内容です。


awkとは何か?

awkは、C言語のような構文を持ったテキスト処理専用のプログラミング言語であり、主にLinuxやUnix環境で使用されます。その名前は開発者であるAho、Weinberger、Kernighanの頭文字をとったものです。

awkは主に以下のような用途に使われます。

  • 特定の列の抽出
  • 条件によるフィルタリング
  • テキストの整形や加工
  • 集計処理(平均・合計など)

awkは「1行ずつ処理して、必要な条件にマッチしたら何かを実行する」という設計思想のもとで動作します。


awkの基本構文

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

このように、特定の条件に合致した行だけを処理・出力できます。


BEGINとENDで前後処理

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スクリプトとして使う

awkは一行コマンドだけでなく、スクリプトファイルとして記述することも可能です。

#!/usr/bin/awk -f

BEGIN {
FS=","
print "名前と職業"
}

{
print $1, "-", $3
}

このようなスクリプトをmyscript.awkとして保存し、以下のように使います。

awk -f myscript.awk sample.csv

スクリプト形式にすることで、複雑な処理も見通し良く記述できます。


awkを使った実用例

以下にawkを活用したいくつかの実用的な例を紹介します。

ログファイルから特定のIPを抽出

awk '{ print $1 }' access.log | sort | uniq -c | sort -nr

これは、ログの先頭にあるIPアドレスをカウントして、多い順に並べる処理です。

メモリ使用量の集計(freeコマンドと組み合わせ)

free -m | awk '/Mem:/ { print "使用中: " $3 "MB / 合計: " $2 "MB" }'

まとめ

awkは、Linuxにおけるテキスト処理の頼れる味方です。シンプルなコマンドから複雑な集計処理まで、柔軟に対応できる点が大きな魅力です。覚えるのが難しそうに感じるかもしれませんが、基本的な使い方さえ押さえれば、業務の効率化に大いに役立ちます。

まずは「特定の列を表示する」「条件を指定して抽出する」といった基本操作から始め、少しずつスクリプト化や集計処理にチャレンジしてみてください。きっとawkの便利さを実感できるはずです。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。