Categories: linux

Linuxのprintfコマンドの使い方|フォーマット付き出力を自在に操ろう

Linuxを使っていると、出力を整えたい場面にたびたび出会います。そんなときに活躍するのが printf コマンドです。C言語でおなじみの printf は、Bashやシェルスクリプトでも強力な出力ツールとして使えます。echo よりも細かな制御ができるため、ログ出力やデバッグメッセージの整形、数値のフォーマットなどに重宝されます。

本記事では、Linuxにおける printf コマンドの基本的な使い方から、実践的な応用テクニックまでをわかりやすく解説します。初心者の方でもすぐに実践できるよう、具体例を交えて紹介していきます。


printfコマンドとは?

printf は「print formatted(フォーマット付き出力)」の略で、その名の通り、出力内容にフォーマット(書式)を指定できます。

printf "書式" 値1 値2 ...

基本構文は上記のようになります。書式には %s(文字列)、%d(10進数)、%f(浮動小数点数)などを指定し、続けて値を入力します。

例:

printf "名前: %s, 年齢: %d\n" "田中" 28

出力結果:

名前: 田中, 年齢: 28

このように、変数の値を指定フォーマットで整えて出力できます。


echoとの違い

多くのLinuxユーザーはまず echo を使いますが、以下の点で printf に軍配が上がります。

1. 出力の改行制御

echo は自動で改行を入れますが、printf は明示的に \n を書かないと改行されません。

echo "Hello"
printf "Hello"

出力:

bashコピーする編集するHello     ← echo は改行される
Hello     ← printf は改行されない

2. 数値や文字列の整形

printf は文字列の幅や小数点以下の桁数を細かく制御できます。

printf "%10s\n" "test"
printf "%.2f\n" 3.14159

出力:

test
3.14

このように、出力内容を「キレイに整形したい」ときは printf が便利です。


書式指定子の一覧と使い方

ここではよく使われる書式指定子を紹介します。

書式説明
%s文字列
%d整数(10進数)
%f浮動小数点数
%x16進数(小文字)
%X16進数(大文字)
%o8進数
%%%記号を出力

例:

printf "商品: %s\n価格: %d円\n" "リンゴ" 120

出力:

商品: リンゴ
価格: 120円

幅や桁数を指定するテクニック

書式に数字を加えることで、幅や小数点以下の桁数を指定できます。

幅の指定

printf "|%10s|\n" "apple"

出力:

|     apple|

右詰めになります。- を付ければ左詰めにできます。

printf "|%-10s|\n" "apple"

出力:

|apple     |

小数点以下の桁数

printf "%.3f\n" 3.141592

出力:

3.142

複数の値を一括出力

値が複数ある場合、printf はそれぞれの書式に対応して順番に出力します。

printf "名前: %s, 年齢: %d, 点数: %.1f\n" "山田" 32 89.75

出力:

名前: 山田, 年齢: 32, 点数: 89.8

書式が1つで値が複数ある場合

書式が繰り返されます。

printf "%s\n" "A" "B" "C"

出力:

A
B
C

シェルスクリプトでの活用例

printf はスクリプト内でも強力な武器です。

例1:ログ出力を整える

#!/bin/bash
user="tanaka"
action="login"
printf "[%s] ユーザー: %s が %s しました\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$user" "$action"

出力(例):

[2025-04-05 14:30:01] ユーザー: tanaka が login しました

例2:テーブル風の出力

printf "%-10s %-5s %-6s\n" "名前" "年齢" "点数"
printf "%-10s %-5d %-6.1f\n" "佐藤" 25 88.6
printf "%-10s %-5d %-6.1f\n" "鈴木" 30 91.2

出力:

名前       年齢   点数  
佐藤 25 88.6
鈴木 30 91.2

数値のゼロ埋めやパディング

先頭をゼロで埋めたいときは以下のようにします。

printf "%03d\n" 7

出力:

コピーする編集する007

ゼロ埋めで一定の桁数を確保できます。


改行・タブ・特殊文字のエスケープ

\n で改行、\t でタブが使えます。

printf "名前\t年齢\t点数\n"
printf "%s\t%d\t%.1f\n" "佐藤" 24 92.5

出力:

名前 年齢 点数
佐藤 24 92.5

エスケープ文字はダブルクォートで囲むことで機能します。


応用:カラー出力や端末制御と組み合わせる

カラーコードと一緒に使えば、見やすいログ出力も可能です。

RED="\033[31m"
RESET="\033[0m"
printf "${RED}エラー:${RESET} ファイルが見つかりません\n"

出力(端末上で赤文字に):

エラー: ファイルが見つかりません

まとめ

printf コマンドは単なる文字列出力にとどまらず、フォーマット制御、ゼロ埋め、桁数調整、スクリプトとの連携など、さまざまな用途で活躍する非常に柔軟なツールです。

特に、複雑な情報を整えて出力したい場面や、ログファイルの作成、ユーザー向けの出力整形などにおいては、echo よりも printf のほうが適しています。

シェルスクリプトや日々のコマンド操作で printf をうまく使いこなすことで、あなたのLinux操作がさらにスマートに、そしてプロフェッショナルに見えるようになるでしょう。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。