2010年6月17日木曜日

sprintf = 文字列を組み立てる - AWK

AWKの文字列操作関数と関連機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk △(全角不可)awk
文字列を組み立てます。

o 単純に結合したいだけでしたら、変数や定数の間に1つ空白を入れて、並べる方法もあります。
    + 詳しくは、「文字列を組み立てる方法


**** 書式
--------
sprintf(書式文字列 [, 値1 [, 値2 ... ]])
--------

o 書式文字列 -- 文字列の形で指定します。詳細はこちら
o 値1, 値2 ... -- 埋め込む値。変数や計算式なども指定出来ます。
o 戻り値 -- 組み立てた文字列


**** 使用例
--------
BEGIN {
  v = sprintf("こんにちは。ミクさん");
  print v;

  v_name = "ミクさん";
  v = sprintf("こんにちは。%s", v_name);
  print v;
}
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


**** 機能
o 指定した書式に合わせて、文字列を組み立てます。
o 書式文字列の書き方は、この下にあります。C言語のsprintfと、ほぼ同じです。
o 単純に文字列として並べたいだけでしたら、変数などをそのまま並べる方が簡単です。
--------
n = 39;
v = "ミクさん。" n "さん。";
--------


** 書式文字列の書き方
o 普通の文字列に、%から始まる書式を埋め込みます。
--------
%[オプション][最低表示幅][.表示桁数][表示に使う型]
--------

o オプション -- 右寄せなどを指定出来ます。詳細は、一番下の表の通りです
o 最低表示幅 -- 表示する文字が少なくても一定の幅を取りたい時に、使用します。
o .表示桁数 -- 小数の形で記載します。表示する型によって意味が異なります。
   + 整数の時は、最低表示桁数です。数値が小さい時は、左側に0を埋めます。
   + %g, %Gの時は、有効数字です。
   + 上記以外の数値の時は、小数点以下の桁数です。
   + %s = 文字列の時は、最大表示桁数です。
   + %cの時は、指定しても意味がありません。
o 表示に使う型 -- 下の表の通りです。良く使う書式は、整数の %d, 文字列の %s, 実数の %g。

o 最低表示幅や表示桁数は、変数の形で指定する事も出来ます。「*」を使います。
--------
n = 4;
v = sprintf("%*d", n, 393); # 結果は「 393」
--------

   + 但し、古い処理系などでも動かす場合は、文字の連結を使う方が確実みたいです。
--------
n = 4;
v = sprintf("%" n "d", 393); # 結果は「 393」
--------

printf, sprintf書式のサポート状況
名前Gawk on
Windows
3.1.7
Gawk for
Windows
3.1.6
mawk32
1.3.3
Mawk for
Windows
1.3.3
awk
(May 1,
2007)
説明
表示に使う型  
%c文字列先頭の1バイトを表示。もしくは数値
(アスキーコード)を指定(0-255)
(他のOSでも動かす時は、半角文字のみがおすすめ。0-127)
%d
%i
整数として表示
%e
%E

(指数部2桁)
数値表示。浮動小数点表記 1.234567e+003
%eは小文字、%Eは大文字で表記
%f
%F

(%F不可)

(%F不可)

(%F不可)
数値表示。固定小数点表記 123.456700
%fは小文字、%Fは大文字で表記
%g
%G
数値表示。浮動小数点表記と固定小数点表記の内、どちらか短い方
%gは小文字、%Gは大文字で表記
%o
(8バイト長)
正の整数として表示。8進数表記
(符号なし)
%s文字列を表示
%u
(8バイト長)
正の整数として表示。10進数表記
(符号なし)
%x
%X

(8バイト長)
正の整数として表示。16進数表記
(符号なし)
%xは小文字、%Xは大文字で表記
%%%自身
良く使う特殊文字  
\tタブ文字
\n改行文字
\\\自身


** オプションの種類
printf, sprintf書式のオプション
名前意味
-最低表示幅を指定した時に、左詰めにします。この指定が無い時は、右詰めです。
v = sprintf("%-10s", "mikusan"); # 結果は「mikusan   」
0最低表示幅を指定した時に、値の左側に空いている場所があれば、0 で埋めます。
v = sprintf("%04d", 393); # 結果は「0393」
+数値の時に、値の左側に符号を付けます。値が0以上の時に + / 負の時に -
v = sprintf("%+d", 393); # 結果は「+393」
「 」(= 半角空白)値の先頭に「-」(マイナス記号)が付かない時は、半角空白を1文字入れます。
値が文字列の時も、先頭に半角空白を入れます。
v = sprintf("% d", 393); # 結果は「 393」
#8進数(%o)に指定すると、値の先頭に「0」を付けます。
16進数(%xや%X)に指定すると、値の先頭に「0x」や「0X」を付けます。
v = sprintf("%#x", 393); # 結果は「0x189」
'(= 一重の引用符)(Gawk on Windows 3.1.7専用)日本の場合、整数を指定した時に限り風に金額表示します。
Gawkのユーザーズガイドによると、地域によって表記が変わるみたいです
v = sprintf("%'d", 123456789); #結果は「123,456,789」
N$(Gawk専用)N番目に指定した変数を表示します。
v = sprintf("%2$s%1$s", "さん", "ミク"); #結果は「ミクさん」


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3
o Mawk for Windows 1.3.3
o original = the one true awk(updated May 1, 2007) -- 全角不可。処理系が非対応


==
関連ページ:
    ▼AWKの文字列操作関数と関連機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > gsub = 文字列を置き換える
    sub = 文字列を、最初の1つだけ置き換える
    gensub = n番目に見つかった文字列を置き換える
    +
    文字列を組み立てる
    文字列中で使用出来る特殊文字
    AWKでバイナリ出力する方法(mawk, Gawk専用)
    printf = 文字列を組み立ててファイルなどに書き出す
    strftime = 時刻を文字列に変換する
(2010年9月14日追加。書式のオプション)