概要
awkは入力をレコード(デフォルト:行)として読み込み、フィールド区切り文字(FS)で分割した後、パターン/アクション { ... } を適用して、希望する出力(OFS)を出力します。一般的な活用法としては、列の抽出、条件フィルタ、合計/平均計算、フォーマット変換などがあります。
主要な組み込み変数
入出力動作と書式を制御する代表的な組み込み変数です。
- NR: これまでに読み込まれたレコード(行)番号
- FNR: 現在のファイルにおけるレコード番号
- NF: 現在のレコードのフィールド数
- FS: 入力フィールド区切り文字(デフォルトは空白)
- OFS: 出力フィールド区切り文字(デフォルトは空白)
- RS: レコード区切り文字(デフォルトは改行)
- ORS: 出力レコード区切り文字(デフォルトは改行)
基本形式
awk '패턴 { 액션 }' input.txt
awk -f program.awk input.txt
パターン/アクションブロックを1行で渡すか、-fでスクリプトファイルを渡します。
主要オプション
実務でよく使われるオプションを状況別にまとめました。gawk互換オプションも含まれます。
1) 基本実行/入力
2) フィールド/変数渡し
3) デバッグ/互換性(gawk)
4) ヘルプ/バージョン
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`awk` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
よく使うパターン
列の抽出
awk -F ':' '{ print $1, $3 }' /etc/passwd
コロンで区切られた1番目と3番目のフィールドのみを出力
条件フィルタ
awk '$5 > 100 { print }' data.tsv
5番目のフィールドの値が100より大きいレコードのみを出力
集計例
awk '{ sum += $2 } END { print sum }' data.txt
2番目の列の合計
変数の渡しとフォーマット
awk -v OFS=',' '$1=="KEY" { print $1, $2, $3 }' input.txt
OFSをカンマに指定し、特定のキーのみを出力
実用的なヒント
1行ずつのストリーム処理なので、パイプとの組み合わせが強力です。
- フィールド区切り文字に正規表現が使用可能: -F '[,:\t]+'
- 複数の-eでプログラムをパートごとに記述可能
- 長いスクリプトは-fで分割し、gitでバージョン管理
- 出力フォーマットはOFS/ORSを適切に調整
- 大量の入力では、必要な最小限の作業のみを残し、パイプラインを簡素化