printf - フォーマット形式で文字列を表示する

スポンサーリンク

printfコマンドは、フォーマット指定子を含むようなフォーマット文字列を利用して、文字列を表示するコマンドです。

printfコマンドは、第一引数として、フォーマット文字列を、第二引数以降はフォーマット指定子に代入する値になります。C言語のprintf関数のようにフォーマット文字列を利用できます。

また、文字列を表示するコマンドとしてechoコマンドがあります。echoコマンドの場合、自動で最後に改行が追加されますが、printfコマンドは自動で改行が追加されません。

スポンサーリンク

printfコマンドの構文

printfコマンドの構文

printf format [argument]...

 

 

 

printfコマンドの利用例

文字列の表示

printfコマンドは、C言語のprintf関数のように利用できます。例えば、0埋めの3桁の数字を表示させたい場合は、'%03d'のようにフォーマット指定子を用いると、値を0埋めの3桁で表示することが出来ます。

コマンド例

実行結果

 

 

 

フォーマット文字列を再利用

C言語のprintf関数と異なり、printfコマンドには面白い特徴があります。
printfコマンドは引数の数がフォーマット指定子の数より多い場合、フォーマット文字列を再利用します。

コマンド例

実行結果

 

 

 

xargsコマンドと組み合わせる

printfコマンドで多くの文字列を加工したい場合、xargsコマンドと組み合わせると文字列の加工が便利です。

コマンド例

実行結果

 

xargs - 標準入力と引数を組み合わせコマンドを実行する
xargsはEX-argsと読み、引数を組み合わせるという意味を持ちます。xargsコマンドは標準入力からリストファイルを読み込み、引数のコマンドラインにそのリストファイルのアイテムを渡して、実行することができます。

 

フォーマット指定子の数に対して、引数が足りない場合、値には0やヌル文字列が入ります。

 

 

 

printfコマンドで利用できるフォーマット指定子

printfコマンドでは以下のフォーマット指定子が利用できます。

フォーマット指定子の種類

指定子 変換
%d 符号付き整数
%i 符号付き整数
%o 符号なし8進数
%u 符号なし整数
%x 符号なし16進数(小文字)
%X 符号なし16進数(大文字)
%f 通常表記の浮動小数点数
%e 指数表記の浮動小数点数(小文字)
%E 指数表記の浮動小数点数(大文字)
%g 数値の大きさに応じた浮動小数点数(大文字)
%G 数値の大きさに応じた浮動小数点数(小文字)
%a 16進数(小文字)の指数表記の浮動小数点、指数は10進数
%A 16進数(大文字)の指数表記の浮動小数点、指数は10進数
%c 単一文字の出力
%s 文字列の出力
%n 今までの印刷された文字数を変数にセット
%% %を出力
%b 文字列のあるエスケープ文字を解釈して、出力
%q 文字列をそのままシェルで利用できるように文字をエスケープ

 

それぞれのフォーマット指定子の利用例は以下のようになります。

コマンド例と実行結果

 

環境によっては、出力結果が多少異なる場合があります。

 

 

 

フォーマット指定子の変換仕様の構文(参考)

GNU C Libraryより、C言語のフォーマット指定子の変換仕様の構文は以下のようになります。

% [ param-no $] flags width [ . precision ] type conversion

printfコマンドではparam-noは指定できないので、printfコマンドを利用する場合は

% flags width [ . precision ] type conversion

の構文で利用できます。

param-noは、POSIX拡張で、printf関数でのフォーマット文字列の後の引数をパラメータ番号で指定できます。C言語で利用する場合は、全てのフォーマット指定子に対して、param-noを付けます。
flagsは、数字の表示方法などを0埋めや左寄せのように変更できます。
widthはフィールドの幅で、precisionは精度になります。
typeは、long int等の型にかかわるパラメータで%ldのlに当たる部分になります。
conversionは、上の例の%dや%fのdやfの記号に当たる部分になります。

 

 

 

flagについて

flagについては例えば、以下のようなフラグがあります。

flagの種類

フラグ 表示方法
’-’ 左寄せ
’+’ 符号を表示(正の場合、+)
’ ’ %dや%iで符号が指定されていない場合、
接頭辞としてスペースを空ける
’'’ 桁区切り(GNU拡張)
’0’ スペースの代わりに0で埋める

上の表のflagをprintfコマンドで利用すると以下のようになります。

コマンド例と実行結果

 

 

 

参考

GNU Coreutils: printf invocation

Output Conversion Syntax (The GNU C Library)