クリップボードにコピーしました!
文字列のawk

awkとprintfを理解してデータ整形を自在に操る入門ガイド

updated: 2026/05/05 created: 2026/04/27

はじめに

awkはテキスト処理に特化した強力なコマンドであり、ログ解析やデータ整形の現場で頻繁に使われます。

その中でもprintfは出力フォーマットを細かく制御できる重要な機能です。
初学者にとってはprintとの違いや書式指定の考え方でつまずきやすいですが、一度理解すると作業効率が大きく向上します。

本記事では、初学者がつまずきやすいポイントに触れながら、実践的に理解できるよう解説していきます。

参考: GNU gawk

awkにおけるprintfの基本役割とprintとの違い

ファイル作成

cat << 'EOF' > input.txt apple 100 banana 200 orange 150 EOF

実行コマンド

awk '{print $1, $2}' input.txt

実行結果

apple 100
banana 200
orange 150

実行コマンド

awk '{printf "%s : %d\n", $1, $2}' input.txt

実行結果

apple : 100
banana : 200
orange : 150

実行コマンド

awk '{printf "%-10s %5d\n", $1, $2}' input.txt

実行結果

apple          100
banana         200
orange         150

仕組み

項目printprintf
改行自動で改行される自動改行されない(\nが必要)
書式指定できない(単純出力)可能(%s, %d, 幅指定など)
出力の柔軟性低い高い(整形・桁揃えなどが可能)
使いどころ簡単な出力フォーマットを整えたい場合

解説

printは簡単な出力向け、printfはC言語のように書式を細かく制御できるのが特徴です。
整形された出力が必要な場合はprintfを使います。

printfの基本構文と書式指定子の使い方(%s, %d, %f)

ファイル作成

cat << 'EOF' > input.txt Alice 25 165.5 Bob 30 172.3 Charlie 22 180.0 EOF

実行コマンド

awk '{ printf("Name: %s | Age: %d | Height: %.1f\n", $1, $2, $3) }' input.txt

実行結果

Name: Alice | Age: 25 | Height: 165.5
Name: Bob | Age: 30 | Height: 172.3
Name: Charlie | Age: 22 | Height: 180.0

仕組み

要素内容
printf書式付きで出力する関数printf("...")
%s文字列を出力名前(Alice)
%d整数を出力年齢(25)
%f浮動小数点を出力身長(165.5)
%.1f小数点以下1桁で表示165.5
$1, $2, $3フィールド参照$1=名前

解説

awk printfはフォーマットを指定して整形出力でき、桁数や表示形式を細かく制御できる。
特に%.nfを使うことで小数点以下の表示桁数を柔軟に調整できる。

桁揃え(左寄せ・右寄せ)とパディング設定

ファイル作成

cat << 'EOF' > input.txt apple 50 banana 7 cherry 123 EOF

実行コマンド

awk '{ printf "%-10s %5d\n", $1, $2 }' input.txt

実行結果

apple          50
banana          7
cherry        123

実行コマンド

awk '{ printf "%10s %05d\n", $1, $2 }' input.txt

実行結果

     apple 00050
    banana 00007
    cherry 00123

仕組み

書式意味例(apple)説明
%-10s左寄せ・幅10文字apple_____右側にスペースで埋める
%10s右寄せ・幅10文字_____apple左側にスペースで埋める
%5d右寄せ・幅5桁(数値)___50数値を右寄せ
%05d0埋め・幅5桁(数値)00050先頭を0で埋める

解説

awk の printf を使うことで、文字列や数値を桁揃えして整形できます。
- や 0 を指定することで、左寄せやゼロパディングなど柔軟に制御できます。

小数点以下の表示桁数と四捨五入

ファイル作成

cat << 'EOF' > input.txt 3.14159 2.71828 1.23456 EOF

実行コマンド

awk '{ printf("%.2f\n", $1) }' input.txt

実行結果

3.14
2.72
1.23

実行コマンド

awk '{ printf("%.3f\n", $1) }' input.txt

実行結果

3.142
2.718
1.235

仕組み

要素内容説明
awkテキスト処理ツール行単位でデータを処理
$1フィールド1入力された数値
printf書式指定出力C言語風フォーマット
%.2f小数点以下2桁四捨五入して表示
%.3f小数点以下3桁指定桁で丸める

解説

printfのフォーマット指定子(例: %.2f)により、小数点以下の桁数を制御しつつ自動的に四捨五入されます。
awkは各行を処理するため、複数データの整形に適しています。

エスケープシーケンスの活用(改行・タブ・特殊文字の制御)

ファイル作成

cat << 'EOF' > input.txt Hello\tWorld Line1\nLine2 Price: \$100 EOF

実行コマンド

awk '{ gsub(/\\t/,"\t"); gsub(/\\n/,"\n"); gsub(/\\\$/,"$"); printf "%s\n", $0 }' input.txt

実行結果

Hello	World
Line1
Line2
Price: $100

仕組み

要素内容
gsub文字列置換を行う関数
/\\t/「\t」という文字列を検出
"\t"実際のタブ文字に変換
/\\n/「\n」という文字列を検出
"\n"実際の改行に変換
/\\\$/「$」を検出
"$"$として出力
printf "%s\n"そのまま整形して出力

解説

BSD awkでは%bが使えないため、gsubで個別にエスケープシーケンスを展開します。
これにより、GNU awkに依存せず同様の出力が可能になります。

変数を用いた柔軟な出力レイアウト

ファイル作成

cat << 'EOF' > input.txt Alice 80 Bob 95 Charlie 70 EOF

実行コマンド

awk '{ printf "Name: %-10s | Score: %3d\n", $1, $2 }' input.txt

実行結果

Name: Alice      | Score:  80
Name: Bob        | Score:  95
Name: Charlie    | Score:  70

仕組み

要素内容
$1, $21列目・2列目のフィールドを取得
printf書式指定で整形して出力
%-10s左寄せで10文字幅の文字列
%3d3桁幅で整数を右寄せ表示
\n改行

解説

awkのprintfを使うことで、列幅や揃え方を細かく制御できる。
これにより表形式のような見やすい出力が可能になる。

CSVデータをレポート形式に変換する手法

ファイル作成

cat << 'EOF' > input.txt name,age,score Alice,23,85 Bob,30,92 Charlie,28,78 EOF

実行コマンド

awk -F',' 'NR>1 { printf "名前: %-10s 年齢: %-3s 点数: %-3s\n", $1, $2, $3 }' input.txt

実行結果

名前: Alice      年齢: 23  点数: 85 
名前: Bob        年齢: 30  点数: 92 
名前: Charlie    年齢: 28  点数: 78 

仕組み

要素内容
-F','フィールド区切りをカンマに指定
NR>11行目(ヘッダ)を除外
$1,$2,$3CSVの各列(name, age, score)
printf書式を指定して整形出力
%-10s左寄せで10文字分確保
%-3s左寄せで3文字分確保

解説

awkのprintfを使うことで、CSVデータを整形されたレポート形式に変換できます。
列幅や配置を制御できるため、見やすい出力が可能です。

日本語(マルチバイト文字)使用時の表示崩れを防ぐ対策

ファイル作成

cat << 'EOF' > input.txt りんご 100 バナナ 200 みかん 300 EOF

実行コマンド

awk '{ printf "%-10s %5d\n", $1, $2 }' input.txt

実行結果

りんご        100
バナナ        200
みかん        300

実行コマンド

awk 'BEGIN{ OFS="\t" } { printf "%s\t%d\n", $1, $2 }' input.txt

実行結果

りんご	100
バナナ	200
みかん	300

仕組み

要素内容
awkテキストを行・列単位で処理するコマンド
printf書式指定で整形出力する(桁揃え可能)
%-10s文字列を左寄せで10文字幅に揃える
%5d数値を右寄せで5桁に揃える
問題点日本語はマルチバイトのため幅がずれる
対策タブ区切りや固定幅を使い、見た目のズレを軽減

解説

awk printfは便利ですが、日本語は文字幅が一定でないためズレが発生します。
タブ区切りや十分な幅指定を使うことで表示崩れを抑えられます。

外部コマンド(column, sort)と連携した高度な整形ワークフロー

ファイル作成

cat << 'EOF' > input.txt apple 120 3 banana 80 5 orange 150 2 grape 200 4 EOF

実行コマンド

awk '{ printf "%-10s %5d %5d\n", $1, $2, $3 }' input.txt | sort -k2 -n

実行結果

banana        80     5
apple        120     3
orange       150     2
grape        200     4

実行コマンド

awk '{ printf "%-10s %5d %5d\n", $1, $2, $3 }' input.txt | sort -k2 -n | column -t

実行結果

banana  80   5
apple   120  3
orange  150  2
grape   200  4

仕組み

ステップコマンド要素役割
1awk printf列幅を指定して整形(左寄せ・右寄せ)
2sort -k2 -n2列目(数値)で昇順ソート
3column -t空白区切りを元に表形式へ整形

解説

awkのprintfでフォーマットを固定し、sortで並び替え、columnで視認性を向上させることで高度な整形が可能になります。
シンプルなコマンド連携でレポート風の出力を実現できます。

大量ログ解析を効率化するprintfデバッグとパフォーマンスの最適化

ファイル作成

cat << 'EOF' > input.txt 2026-04-26 10:00:01 INFO user_id=101 action=login time=120 2026-04-26 10:00:02 INFO user_id=102 action=logout time=30 2026-04-26 10:00:03 INFO user_id=103 action=login time=200 2026-04-26 10:00:04 INFO user_id=101 action=login time=150 EOF

実行コマンド

awk '{ printf "USER:%s ACTION:%s TIME:%sms\n", $4, $5, $6 }' input.txt

実行結果

USER:user_id=101 ACTION:action=login TIME:time=120ms
USER:user_id=102 ACTION:action=logout TIME:time=30ms
USER:user_id=103 ACTION:action=login TIME:time=200ms
USER:user_id=101 ACTION:action=login TIME:time=150ms

実行コマンド

awk '{ split($6,a,"="); total+=a[2] } END { printf "TOTAL TIME: %dms\n", total }' input.txt

実行結果

TOTAL TIME: 500ms

実行コマンド

awk '$5=="action=login" { printf "%s %s\n", $4, $6 }' input.txt

実行結果

user_id=101 time=120
user_id=103 time=200
user_id=101 time=150

仕組み

要素内容
awkテキストを1行ずつ処理するストリーム処理ツール
printfフォーマット指定で高速かつ整形された出力
split文字列を分割して値だけ抽出
条件式必要なログだけを高速にフィルタ
累積変数total+=でパフォーマンス集計

解説

awkのprintfを使うことでログ整形とデバッグを同時に高速実行できる。
不要なログを除外しつつ集計することで、大量ログ解析の効率が大幅に向上する。

awkとprintfを活用した実践的データ整形のまとめ

awkとprintfを組み合わせることで、単なるテキスト処理を超えた高度なデータ整形が可能になります。
printとの違いを理解し、書式指定子や桁揃え、小数点制御を使いこなすことで、出力の質は大きく向上します。さらにエスケープシーケンスや変数、外部コマンドとの連携を取り入れることで、実務レベルの処理にも対応できるようになります。
初学者のうちは一つずつ試しながら理解を深めることが、確実なスキル習得への近道です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

©︎ 2025-2026 running terminal commands