作者: Yさ
日時: 2002/5/9(21:52)
拡張してみました。

■仕様
 ・名称の読み仮名データを準備し、読み(文字コード)順にソートして表示
 ・OSのsortコマンドを利用します(^^;)ちょち手抜き

 ↓こんな感じです。
-----
[い]
  言い出しっぺの法則   ... 1,11
  インタープリター     ... 12

[か]
  改行                 ... 29
  改行コード           ... 13
  改行文字             ... 14
  漢字コード           ... 2,15
 :
-----


■使い方
 >gawk32 -f index2.awk 作成元データ | sort | gawk32 -f fixindex.awk[ENTER]
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
等として実行して下さい。
 なお、デフォルトの読み仮名データファイル名は yomi.txt です。
 違うファイル名のものを使用する場合は

 gawk32 -v YOMIDATA=読み仮名データ -f index2.awk 作成元データ

等と指定して変更してください。


■スクリプト
--^ index2.awk
BEGIN{ if(YOMIDATA=="") YOMIDATA="yomi.txt";  # デフォルトの読み仮名データ
  # 読み仮名データの読み込み
  while((getline<YOMIDATA)>0){
    yomi=$1; name=substr($0, index($0,$2));
    yomi_tbl[name]=yomi;
  }
  close(YOMIDATA);
}
{ page=$1; name=substr($0, index($0,$2));
  tbl[name]=tbl[name] page ",";           }
END{
  # [読み]~@~[索引本体] として表示
  for(i in tbl)
    printf("%s~@~%-20s ... %s\n",
      yomi_tbl[i], i, substr(tbl[i], 1, length(tbl[i])-1));
}
--$

--^ fixindex.awk
BEGIN{ FS="~@~"; } # [読み]~@~[索引本体] となっている
{ # 見出し(読みの頭1文字)
  now=substr($1, 1, 2);
  if(prev!=now) print "\n[" now "]";
  prev=now;
  # 索引本体
  printf("  %s", $2);
  for(i=3; i<=NF; ++i) printf("%s%s", FS, $i); print ""; # 念のため(;^^ゞ
}
--$

 ちなみにマルチバイト対応のawkだと
-----
  # 見出し(読みの頭1文字)
  now=substr($1, 1, 2);
-----
  がよろしくないかもしれません(^^;)どなたかご確認願います。


■サンプルデータ
--^ yomi.txt
かいぎょうもじ 改行文字
めたもじ メタ文字
すーす 師叔
らくだぼん らくだ本
きょうてん 教典
すくりぷと スクリプト
こんぱいらー コンパイラー
かいぎょうこーど 改行コード
せいきひょうげんえんざんし 正規表現 演算子
めたきゃらくたー メタキャラクター
ひとばしら 人柱
まーくあっぷげんご マークアップ言語
ふごうか 符号化
かんじこーど 漢字コード
いんたぷりたー インタープリター
さほう 作法
じょうほうつうゆう 情報通有
いいだしっぺのほうそく 言い出しっぺの法則
かいぎょう 改行
せいきひょうげん 正規表現
めた メタ
--$

--^ index2.txt
1 言い出しっぺの法則
2 漢字コード
3 教典
4 作法
5 師叔
6 スクリプト
7 正規表現 演算子
8 人柱
9 マークアップ言語
10 らくだ本
11 言い出しっぺの法則
12 インタープリター
13 改行コード
14 改行文字
15 漢字コード
16 教典
17 コンパイラー
18 作法
19 情報通有
20 師叔
21 スクリプト
22 正規表現 演算子
23 人柱
24 符号化
25 マークアップ言語
26 メタキャラクター
27 メタ文字
28 らくだ本
29 改行
30 正規表現
31 メタ
--$

以上