awk コマンドの使い方 [Linux]

2025/04/25

awk コマンドとは?

awk は、テキストファイルの各行をフィールド単位で処理し、条件に応じて整形・抽出・集計を行うことができる強力なテキスト処理ツールです。
主にログ解析、CSV整形、フィールド抽出などに利用されます。

基本構文

awk 'パターン { アクション }' ファイル名

例:

awk '{print $1}' file.txt

サンプルデータ

以下のようなデータがファイルにあると仮定します:

file.txt

ID001 DataA 100
ID002 DataB 120
ID003 DataC 90

/etc/passwd(例)

root:x:0:0:root:/root:/bin/bash
user1:x:1000:1000::/home/user1:/bin/bash

scores.txt

Alice 120
Bob 140
Carol 90

主な機能とキーワード

キーワード説明
print出力
$1, $2...フィールド指定(1列目、2列目…)
NR現在の行番号
NF各行のフィールド数
BEGIN入力処理前に1回だけ実行
END入力処理後に1回だけ実行

よく使うオプションと記法

  • -F 区切り文字を指定(デフォルトは空白)
  • '...' で囲んだ中で {print $N} のように処理を記述
  • $0 は行全体、$1, $2 はフィールド
  • if, for, while などC言語風の構文も使用可能

使用例と出力サンプル

1列目を表示

$ awk '{print $1}' file.txt
ID001
ID002
ID003

区切り文字が : の場合(/etc/passwd)

$ awk -F ':' '{print $1}' /etc/passwd
root
user1

行番号付きで出力

$ awk '{print NR, $0}' file.txt
1 ID001 DataA 100
2 ID002 DataB 120
3 ID003 DataC 90

フィールド数が3以上の行だけ表示

$ awk 'NF >= 3' file.txt

条件付き出力(3列目が100より大きい)

$ awk '$3 > 100 {print $1, $3}' file.txt
ID002 120

ヘッダーをスキップ(1行目以外)

$ awk 'NR > 1 {print $1, $2}' file.txt
ID002 DataB
ID003 DataC

BEGIN / END ブロック使用

$ awk 'BEGIN {print "START"} {print $1} END {print "DONE"}' file.txt
START
ID001
ID002
ID003
DONE

よくあるエラーと対処

エラー例原因対処法
awk: syntax error' の不一致またはブロック記法ミス引数を ' ' で正しく囲む
フィールド数が一致しない区切り文字が違う-F で正しい区切り文字を指定する

まとめ

  • awk はフィールドベースでデータ抽出や整形ができる高機能ツール
  • $1, NR, NF, BEGIN などを活用すると柔軟な処理が可能
  • CSVやログ処理に最適で、シェルスクリプトとも相性が良い

参考リンク

  • https://man7.org/linux/man-pages/man1/awk.1.html
  • https://www.grymoire.com/Unix/Awk.html
  • https://www.gnu.org/software/gawk/manual/gawk.html

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です