連載
» 2019年07月05日 05時00分 公開

Linux基本コマンドTips(319):【 printf 】コマンド――データを整形して表示する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、入力データを整形して表示する「printf」コマンドです。

[西村めぐみ,@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、入力データを整形して表示する「printf」コマンドです。

printfコマンドとは?

 「printf」は入力データを整形して表示するコマンドです。

 printfという名前のコマンドは複数あり、一つはbashの内部コマンド(ビルトインコマンド、シェルコマンド)、もう一つは外部コマンド(/usr/bin/printf)です。パスなどを指定しないで実行した場合は、ビルトインコマンドのprintfを実行します(連載第153回)。



printfコマンドの書式

printf [-v 変数名] 書式 [数や文字列などの値]

※[ ]は省略可能な引数を示しています。





printfの主なオプション

短いオプション 意味
-v 変数名 整形した内容をシェル変数にセットする(内部コマンドのみ)

書式の指定に使用する記号(※1)

記号 意味
%dまたは%i 10進数の整数(符号付き)
%u 10進数の整数(符号なし)
%o 8進数の整数(符号付き)
%x 16進数の整数(符号付き、アルファベット部分は小文字)
%X 16進数の整数(符号付き、アルファベット部分は大文字)
%fまたは%F 小数形式の浮動小数点数(%に続けて「整数部の桁数.小数部の桁数」を指定可能、指定しなかった場合は小数点以下5桁で表示)
%e 指数形式の浮動小数点数(指数記号"e"部分が小文字)
%E 指数形式の浮動小数点数(指数記号"E"部分が大文字)
%g %eまたは%f(適した方の書式を自動選択する)
%G %Eまたは%F(適した方の書式を自動選択する)
%c 1文字
%s 文字列

※1 %の後に桁数を指定することも可能(例えば3桁の整数ならば%3dなど、本文を参照)。数値の場合、%の後ろに「'」記号を付けると3桁区切りで出力できる(本文を参照



特殊文字などを表す記号

記号 意味
\" 単一の「"(ダブルクォーテーション)」文字
\\ バックスラッシュ
\a 警告(ベル音)
\b バックスペース
\e エスケープ
\f フォームフィード
\n 改行
\r キャリッジリターン
\t 水平タブ
\v 垂直タブ
\NNN 8進数で表現した1バイト文字(NNN部分は1〜3文字の数字)
\xHH 16進数で表現した1バイト文字(HH部分は1〜2文字の16進数)
\uHHHH 16進数4文字で表現したUnicode(ISO/IEC 10646)スカラー値
\UHHHHHHHH 16進数8文字で表現したUnicodeスカラー値
%% 単一の「%」文字


数値を整形して表示する

 「printf 書式 値」で、指定した値を書式に従って出力します。例えば「123456」という数値を16進数で表示するならば「printf "%X" 1234656」、3桁区切りの整数で表示するならば「printf "%'d" 123456」のように書きます(画面1)。

 数値の場合、「%」の後に表示する桁数を指定できます。例えば「%3d」の場合は指定した数値を3桁の幅で表示します。数値が3桁より小さい場合は空白で幅を自動調節します。逆に、3桁より大きい場合は3桁よりはみ出して表示します。

 桁数を指定した場合、数字は右寄せになります。左寄せにしたい場合は「%-3d」のように、マイナスを付けて指定します。

 先頭を0で埋めた状態(0でパディング)にしたい場合は「%03d」のように、「0」と桁数を指定します。

 なお、書式指定の引用符は必須ではありません。「printf %X 1234656」あるいは「printf %\'d 123456」のように表記しても動作します。ただし、多くの場合は書式の最後に改行を表す「\n」を付けたり、後ほど紹介するように書式の中に空白を入れたりすることが多いため、書式全体を「"〜"」で囲む方が分かりやすく、指定もしやすいでしょう。

 printfは出力を自動改行しません。コマンド実行例のように必要に応じ「\n」を指定してください。

コマンド実行例

printf "書式" 値

(値を書式に従って表示する)

printf "%X\n" 1234656

(16進数で123456を表示後、改行する)(画面1

printf "%'d\n" 123456

(3桁区切りで123456を表示後、改行する)(画面1

printf "%3d\n" 10

(3桁で10を表示後、改行する)(画面1

printf "%-3d\n" 10

(3桁で左寄せにして10を表示後、改行する)(画面1

printf "%03d\n" 10

(先頭を0で埋めた3桁で10を表示後、改行する)(画面1


画面1 画面1 さまざまな書式を指定して数値を出力したところ 「1234656」を16進数で表現すると「12D6E0」になる


複数の値や自由な文字列と組み合わせて表示する

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。