【コマンド詳細】awkコマンドの使い方とオプションまとめ

  • URLをコピーしました!
目次

awk コマンドとは?

awk は、テキスト処理やデータ解析に特化した強力なツールであり、主に次のような操作に使用されます。

  • カラム(フィールド)ごとのデータ操作
  • パターンに基づいた行の抽出
  • 計算やフォーマット処理

具体例

  • CSVファイルやログファイルの処理
  • 条件に応じたデータの抽出
  • データの統計情報の取得

コマンド構文

awk [オプション] 'スクリプト' ファイル

スクリプト構成

  • パターン: 操作対象の行を指定する条件(例: /pattern/
  • アクション: パターンに一致する行に対して実行する操作(例: {print $1}
例:
awk '/error/ {print $1}' file.log

上記は、file.log内で「error」を含む行の1列目を出力します。

主なオプション一覧

オプション説明
-Fデリミタ(フィールド区切り文字)を指定
-v外部変数をawkスクリプト内で使用
-fスクリプトファイルを指定
–helpawkのヘルプを表示

基本構文の解説

表記説明
$nn番目のフィールド(列)を表す
$0行全体を表す
NR現在処理している行番号
NF現在処理している行のフィールド(列)の数
FSフィールド区切り文字(デフォルトは空白)
OFS出力時のフィールド区切り文字

使用例と出力結果

1. 特定の列を抽出

例: 1列目を表示
awk '{print $1}' file.txt
入力ファイル (file.txt):
Alice 25 Developer
Bob 30 Designer
Charlie 22 Analyst
出力
Alice
Bob
Charlie
解説
  • $1 は1列目を表します。
  • 複数列を表示する場合、列番号をスペースで区切ります(例: {print $1, $3})。

2. 条件に一致する行を抽出

例: 「30」を含む行を表示
awk '$2 == 30' file.txt
出力
Bob 30 Designer
解説
  • $2 は2列目を指します。条件式で一致する行だけを抽出します。

3. カラムの演算

例: 2列目に10を加算して表示
awk '{print $1, $2+10, $3}' file.txt
出力
Alice 35 Developer
Bob 40 Designer
Charlie 32 Analyst
解説
  • $2+10 により2列目の値に10を加算します。

4. フィールド区切り文字を指定

例: カンマ区切り(CSV)の1列目を抽出
入力ファイル (data.csv)
Name,Age,Role
Alice,25,Developer
Bob,30,Designer
コマンド:
awk -F ',' '{print $1}' data.csv
出力
Name
Alice
Bob
解説
  • -F ',' でカンマをフィールド区切り文字として指定しています。

5. 行番号付きで表示

例: 各行に行番号を追加
awk '{print NR, $0}' file.txt
出力
1 Alice 25 Developer
2 Bob 30 Designer
3 Charlie 22 Analyst
解説
  • NR は現在の行番号を表します。

6. 外部変数を利用

例: 最小年齢を外部変数で指定し、それ以上の行を表示
awk -v min_age=25 '$2 >= min_age {print $0}' file.txt
出力
Alice 25 Developer
Bob 30 Designer
解説
  • -v オプションでmin_ageを指定し、スクリプト内で使用しています。

7. スクリプトファイルの利用

スクリプトファイル (script.awk):
$2 > 20 {print $1, $3}
実行コマンド:
awk -f script.awk file.txt
出力
Alice Developer
Bob Designer
Charlie Analyst

応用例

1. 統計情報の取得

例: 年齢の合計を計算
awk '{sum += $2} END {print "Total:", sum}' file.txt
出力
Total: 77
解説
  • sum += $2 で2列目の値を加算しています。
  • END ブロックで、処理終了後に結果を出力します。

2. パターンマッチングによる抽出

例: 「Developer」を含む行を抽出
awk '/Developer/ {print $0}' file.txt
出力
Alice 25 Developer

3. 別ファイルへの出力

例: 年齢が30以上の行を別ファイルに保存
awk '$2 >= 30 {print $0}' file.txt > output.txt

注意点

  1. フィールド区切り文字の指定
    デフォルトは空白ですが、CSVなどでは適切に指定する必要があります。
  2. 大規模データ処理の性能
    awkは非常に効率的ですが、データが膨大な場合にはメモリ使用量に注意してください。
    目次