2010年6月18日金曜日

AWKを入手する - AWK

AWK
AWKの種類と特徴
Gawk4 Windows版実行ファイルの入手方法
Windows 版gawk, mawkを入手する
Windows版nawkを入手する
Windows版nawkを、自分でビルドする
AWKプログラムを他の言語に変換する方法。AWK to Perl, C, C++
Windows版AWKの配布元一覧(awk, mawk, Gawk)
AWK本家のホームページの場所
----
o UNIXについては、AWKが入っていない場合でも、追加インストール出来ると思います。
    + レンタルサーバーに入っていない時は、ソースコードを入手して、自分でmakeする方法が一般的みたいです。


==
関連ページ:
    ▼AWK
    ▼コンピューター・プログラムを作る
    ▼制作メモ
    > ▼AWKプログラムを動かす
    ▼AWKプログラムを書く

Windows版AWKの配布元一覧(awk, mawk, Gawk) - AWK

AWKを入手する
使った事があるものを纏めました。他にもあると思います。

**** Gawk
** Gawk バージョン 4
o ▽ezwinports版(最新版は 4.0.2)
   + 英語版との事です。日本語対応は未確認
   + Gawkのexeファイルダウンロードリンクは、gawk-4.0.2-w32-bin.zip です。
o ▽Klabaster-Homepage版(最新版は 4.0.1)
   + 英語版との事です。日本語対応は未確認
   + Gawkのダウンロードリンクは、ページの中央やや下にあります。

** Gawk バージョン 3
o Gawk on Windows(最新版は 3.1.7)
   + 2010年11月3日現在、公開停止中でした。
   + 日本語対応が強化されています。Windowsで最新機能を使いたい方向けです。
o ▽gawk 3.1.5 for Windows(Vector)
   + 日本語対応が強化されています。個人サイトからのダウンロードに不安がある方向けです。
o ▽Gawk for Windows(最新版は 3.1.6)
   + 公開ページの雰囲気を見た限りでは、UNIX版Gawkを、極力そのままの形で移植しているみたいです。
o ▽Cygwinに含まれているgawkパッケージ
   + UNIXのコマンドに慣れている方向けです。
   + UNIX版Gawkを、極力そのままの形で移植しているみたいです。
   + インストール方法も独特ですので、分からない事はWeb検索します。
o その他、Vectorなどにある、古いバージョンのGawk
   + レンタルサーバー用のプログラムを作る時は、役に立つかもしれません。
   + レンタルサーバー内にGawkが見当たらない時は、mawkやオリジナルawkで動くように書きます。

** ご参考。Gawkオリジナルのソースコード
o ▽Gawk - GNU Project - Free Software Foundation (FSF)


**** mawk
o ▽mawk MBCS (32bit版)(Vector)
   + 日本語対応が強化されています。Gawkに合わせて、時刻系の関数が追加されていました。
   + 日本語対応度は、Gawk on Windowsよりも弱いです。(全角文字を2文字と数えます)
o ▽Mawk for Windows
   + 公開ページの雰囲気を見た限りでは、UNIX版mawkを、極力そのままの形で移植しているみたいです。
   + 日本語は、文字化けする事がありました。(1.3.3)(この時の文字コードは、Shift-JIS)

** ご参考。mawkオリジナルのソースコード(Debian版)
o Debian 安定板(squeeze)の mawk パッケージ


**** awk / nawk
o ▽Nawk for Windows
   + オリジナルのAWK(= ベル研究所バージョン)を改善したものです。
   + このプログラムの名前も the one true awkですが、オリジナルと区別して nawk と呼ばれています。
o ▽the one true awk (ベル研究所バージョン)
   + AWK言語開発者が作ったプログラムです。ソースコードも同じページにあります。
   + Windows版の実行ファイルは、「Windows executable」と書かれたリンクからダウンロード出来ます。
   + 日本語は、文字化けする事がありました。(updated May 1, 2007)(この時の文字コードは、Shift-JIS)

** ご参考。nawkオリジナルのソースコード
o ▽newest Awk (nawk)
   + AWK言語開発者の一人が公開している、the one true awkの最新版


**** その他、Webで話題になった処理系
o JGAWK = ▽jgawk MSDOS用実行形式(Vector)
   + Gawk 2.15の頃に作られた日本語対応版です。今のGawkよりも、mawk に近いです。
   + CAD(= 製図システム)関係で重宝されています。
   + この他、10年以上前に書かれたAWK参考書やWebページの影響で、人気(?)が高いです。
   + 最新版は、Gawk 3.0.6 + multi-byte extension 1.15あたり。個人レベルで流通しているみたいです。

** 以下、私は試していませんが、次の処理系の話題も聞いた事があります。
o xgawk = ▽XMLgawk Home Page
   + XML文書を簡単に読み込む事が出来るみたいです。
o Jawk = ▽Jawk - AWK for Java
   + Java上で動くAWK処理系です。Javaプログラムを混ぜて使う事が出来るみたいです。


==
関連ページ:
    ▼AWKを入手する
    ▼AWK
    ▼制作メモ
    > AWK本家のホームページの場所
    AWKの種類と特徴
    Windows 版gawk, mawkを入手する
    ▼AWKプログラムを動かす
(2012年10月4日追加。Gawk4)
(2011年7月15日追加。nawk関係)

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日追加。書式のオプション)