awkとは?
awkとは、Linux/Unix環境でテキストデータの抽出や加工、集計を効率的に行うためのスクリプト言語(コマンド)です
参考:GNU awk
この記事で解決できること
この記事ではawkコマンドを以下の8つに分けて解説しています
- 条件分岐・制御構文
- 関数・処理系
- 文字列処理・正規表現
- フィールド・レコード関連
- 配列・データ構造
- 変数・スクリプト
- 他コマンドとの比較・連携
- データ分割
各見出しの先頭に基本動作を確認できるコードと結果を配置しているので、動作確認が簡単にできます
詳しい動作を知りたい方はリンクを辿ってください
条件分岐・制御構文
awk ifの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple 100
banana 200
cherry 150
EOF
実行コマンド
awk '{ if ($2 > 150) print $1, $2 }' input.txt
実行結果
banana 200
awk ifの詳細
awk beginの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple 100
banana 200
orange 300
EOF
実行コマンド
awk 'BEGIN { print "=== 開始処理 ===" }
{ print "商品:", $1, "価格:", $2 }
END { print "=== 終了処理 ===" }' input.txt
実行結果
=== 開始処理 ===
商品: apple 価格: 100
商品: banana 価格: 200
商品: orange 価格: 300
=== 終了処理 ===
awk beginの詳細
awk BEGINブロック完全ガイド:変数初期化から集計パターンまで解説
関数・処理系
awk functionの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple 100
banana 200
orange 150
EOF
実行コマンド
awk '
function add_tax(price) {
return price * 1.1
}
{
taxed = add_tax($2)
print $1, taxed
}
' input.txt
実行結果
apple 110
banana 220
orange 165
awk functionの詳細
awkのfunctionを理解して効率的なテキスト処理を実現するための実践ガイド
awk printfの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple 100
banana 200
orange 150
EOF
実行コマンド
awk '{printf "%s : %d\n", $1, $2}' input.txt
実行結果
apple : 100
banana : 200
orange : 150
awk printfの詳細
awkとprintfを理解してデータ整形を自在に操る入門ガイド
awk getlineの基本構文
ファイル作成
cat << 'EOF' > input.txt
line1
line2
line3
EOF
実行コマンド
awk '{
print "現在行:", $0
if (getline next_line) {
print "getline取得:", next_line
}
}' input.txt
実行結果
現在行: line1
getline取得: line2
現在行: line3
awk getlineの詳細
awkのgetlineを理解するための実践ガイドと安全な使い方
文字列処理・正規表現
awk matchの基本構文
ファイル作成
cat << 'EOF' > input.txt
Hello 123 World
abc456def
no numbers here
EOF
実行コマンド
awk '{ if (match($0, /[0-9]+/)) print $0, "-> RSTART=" RSTART ", RLENGTH=" RLENGTH }' input.txt
実行結果
Hello 123 World -> RSTART=7, RLENGTH=3
abc456def -> RSTART=4, RLENGTH=3
awk matchの詳細
awk subの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple orange apple
banana apple grape
EOF
実行コマンド
awk '{ sub("apple","APPLE"); print }' input.txt
実行結果
APPLE orange apple
banana APPLE grape
awk subの詳細
awk gsubの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple orange apple grape
EOF
実行コマンド
awk '{ gsub("apple", "banana"); print }' input.txt
実行結果
banana orange banana grape
awk gsubの詳細
awkのgsubを徹底解説 初心者でも理解できる文字列置換の基本から応用
awk substrの基本構文
ファイル作成
cat << 'EOF' > input.txt
Hello,awk,substr,function
EOF
実行コマンド
awk '{ print substr($0,1,5) }' input.txt
実行結果
Hello
awk substrの詳細
awk 正規表現の基本構文
ファイル作成
cat << 'EOF' > input.txt
apple 123
banana 456
cherry_789
grape-001
EOF
実行コマンド
awk '/[a-z]+ [0-9]+/' input.txt
実行結果
apple 123
banana 456
awk 正規表現の詳細
フィールド・レコード関連
awk nfの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple orange banana
cat dog
red blue green yellow
EOF
実行コマンド
awk '{print NF}' input.txt
実行結果
3
2
4
awk nfの詳細
awkとnfを理解してデータ処理を自在に操るための実践ガイド
awk nrの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple
banana
cherry
EOF
実行コマンド
awk '{print NR, $0}' input.txt
実行結果
1 apple
2 banana
3 cherry
awk nrの詳細
awk fsの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple,100,red
banana,200,yellow
grape,300,purple
EOF
実行コマンド
awk -F',' '{print $1, $2, $3}' input.txt
実行結果
apple 100 red
banana 200 yellow
grape 300 purple
awk fsの詳細
awk ofsの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple orange banana
dog cat mouse
EOF
実行コマンド
awk 'BEGIN{OFS=","} {print $1, $2, $3}' input.txt
実行結果
apple,orange,banana
dog,cat,mouse
awk ofsの詳細
awk field separatorの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple orange banana
cat dog mouse
one two three
EOF
実行コマンド
awk '{print $1, $2, $3}' input.txt
実行結果
apple orange banana
cat dog mouse
one two three
awk field separatorの詳細
awkでfieldとseparatorを理解する実践入門ガイド
配列・データ構造
awk arrayの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple 100
banana 200
apple 150
orange 300
banana 50
EOF
実行コマンド
awk '{ arr[$1] += $2 } END { for (key in arr) print key, arr[key] }' input.txt
実行結果
apple 250
banana 250
orange 300
awk arrayの詳細
変数・スクリプト
awk variableの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple 100
banana 200
orange 300
EOF
実行コマンド
awk '{ total += $2 } END { print total }' input.txt
実行結果
600
awk variableの詳細
awk scriptの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple
banana
cherry
EOF
ファイル作成
cat << 'EOF' > script.awk
BEGIN { print "=== awk script start ===" }
{ print NR ":" $0 }
END { print "=== awk script end ===" }
EOF
実行コマンド
awk -f script.awk input.txt
実行結果
=== awk script start ===
1:apple
2:banana
3:cherry
=== awk script end ===
awk scriptの詳細
他コマンドとの比較・連携
awk sedの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple 100
banana 200
orange 300
EOF
実行コマンド
awk '{ print $1, $2 }' input.txt
実行結果
apple 100
banana 200
orange 300
実行コマンド
sed 's/ / : /' input.txt
実行結果
apple : 100
banana : 200
orange : 300
awk sedの詳細
awk grepの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple 100
banana 200
orange 150
apple 300
grape 120
EOF
実行コマンド
awk '{print $1, $2}' input.txt
実行結果
apple 100
banana 200
orange 150
apple 300
grape 120
実行コマンド
grep "apple" input.txt
実行結果
apple 100
apple 300
awk grepの詳細
awk sortの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple 300
orange 150
banana 200
grape 180
apple 120
EOF
実行コマンド
awk '{ print $1, $2 }' input.txt
実行結果
apple 300
orange 150
banana 200
grape 180
apple 120
実行コマンド
sort input.txt
実行結果
apple 120
apple 300
banana 200
grape 180
orange 150
awk sortの詳細
データ分割
awk splitの基本構文
ファイル作成
cat << 'EOF' > input.txt
apple,orange,banana
EOF
実行コマンド
awk '{
split($0, fruits, ",")
print fruits[1]
print fruits[2]
print fruits[3]
}' input.txt
実行結果
apple
orange
banana
awk splitの詳細
awkのsplit関数の使い方を初心者向けにわかりやすく解説
まとめ
この記事では以下の8つの項目に分けてawkコマンドを解説しました
- 条件分岐・制御構文
- 関数・処理系
- 文字列処理・正規表現
- フィールド・レコード関連
- 配列・データ構造
- 変数・スクリプト
- 他コマンドとの比較・連携
- データ分割
awkの基本設計から高度なテキスト加工、他コマンドとの連携にいたるまでの強力なデータ処理能力を網羅的に解説しました。
awkは単なるテキストフィルターに留まらず、制御構文や動的配列、豊富な組み込み関数を備えた、極めて完成度の高い「プログラミング言語」です。
各見出しで紹介したテクニックを活用することで、肥大化するログの集計や複雑なデータ分割といった日々のトラブルシューティングを、1行のスクリプト(ワンライナー)で効率化できるようになりましょう。
awk以外のコマンド記事
awkコマンド以外にもコマンドの記事を扱っています
よろしければご覧ください