目次
awk
コマンドとは?
awk
は、テキスト処理やデータ解析に特化した強力なツールであり、主に次のような操作に使用されます。
- カラム(フィールド)ごとのデータ操作
- パターンに基づいた行の抽出
- 計算やフォーマット処理
具体例
- CSVファイルやログファイルの処理
- 条件に応じたデータの抽出
- データの統計情報の取得
コマンド構文
awk [オプション] 'スクリプト' ファイル
スクリプト構成
- パターン: 操作対象の行を指定する条件(例:
/pattern/
) - アクション: パターンに一致する行に対して実行する操作(例:
{print $1}
)
例:
awk '/error/ {print $1}' file.log
上記は、file.log
内で「error」を含む行の1列目を出力します。
主なオプション一覧
オプション | 説明 |
---|---|
-F | デリミタ(フィールド区切り文字)を指定 |
-v | 外部変数をawk スクリプト内で使用 |
-f | スクリプトファイルを指定 |
–help | awk のヘルプを表示 |
基本構文の解説
表記 | 説明 |
---|---|
$n | n番目のフィールド(列)を表す |
$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
注意点
- フィールド区切り文字の指定
デフォルトは空白ですが、CSVなどでは適切に指定する必要があります。 - 大規模データ処理の性能
awk
は非常に効率的ですが、データが膨大な場合にはメモリ使用量に注意してください。
シェルスクリプトと自動化の基礎:sedコマンド詳細
Linuxで効率的なシステム管理を行うためには、シェルスクリプトや自動化ツールを理解することが重要です。本記事では、bash、cron、at、awk、sedを使った自動化やテキス…
【コマンド詳細】sedコマンドの使い方とオプションまとめ
sed コマンドとは? sed (Stream Editor) は、LinuxやUNIXシステムで使われるストリーム形式のテキストエディタです。ファイルを直接開くことなく、以下のようなテキス…