目次
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システムで使われるストリーム形式のテキストエディタです。ファイルを直接開くことなく、以下のようなテキス…					
				