2010年9月4日土曜日

asorti = 配列の添え字を取り出して並び替える(Gawk専用) - AWK

AWKの配列操作関数と関連機能
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
配列の添え字を取り出して、小さな順に並び替えます。

o 配列の添え字を、値として並べます。


**** 書式
--------
asorti(並び替えたい配列 [, 並び替え結果])
--------

o この関数は、Gawkの拡張機能です。
o 並び替えたい配列 -- 他に指定がないと、この配列を直接変更します。
o 並び替え結果 -- 配列を返します。「並び替えたい配列」を直接変更したくない時に指定します。
   + 呼び出す時に、値を設定する必要はありません。
o 戻り値 -- 配列の要素数です。


**** 使用例
--------
BEGIN {
  a["CV-01"] = "ミクさん";
  a["CV-02"] = "リンレン";
  a["CV-03"] = "ルカ様";
  n = asorti(a, b);

  print "ミクさん達の登場順";
  for (i = 1; i <= n; ++i) {
    print i "番。" b[i] "、" a[b[i]];
  }
}
--------

o asorti 呼び出し後の、配列 b(並び替え結果)の内容
--------
b[1] = "CV-01";
b[2] = "CV-02";
b[3] = "CV-03";
--------

o 実行結果
--------
ミクさん達の登場順
1番。CV-01、ミクさん
2番。CV-02、リンレン
3番。CV-03、ルカ様
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
o 逆順に表示したい時は、後ろから数えます。


**** 機能
o 配列の添え字を取り出して、小さな順に並び替えます。
   + 配列の添え字を、値として並べます。
   + そして、添え字を 1から順に付け直します。
o 「並び替え結果」の指定が無い時は、「並び替える配列」を直接変更します。

o 並び替え順序は、文字列の小さい順です。
   + 添え字に数値を指定した時も、「文字列としての小さな順」に並びました。1 11 2 の順序です。
   + asortの並び順とは少し違いますので、ご注意下さい。
o 大文字小文字を区別したくない時、変数 IGNORECASEの値を設定すると、動作が変わります。
o 同じ値を持つ要素が複数あると、それらの要素は連続して並びます。「纏めて一つの要素にする」事はしません。
o この機能をサポートしていない処理系があります。

** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6


**** メモ
o この機能は、配列の添え字を文字列にしている時に便利です。
o for (i in a) を使って表示させると、添え字順に並ぶとは限らないからです。


**** 確認した処理系
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
    ▼制作メモ
    > SUBSEP = 配列の添え字の区切り文字
    +
    asort = 配列の要素を並び替える(Gawk専用)

asort = 配列の要素を並び替える(Gawk専用) - AWK

AWKの配列操作関数と関連機能
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
配列の要素を、値の小さな順で並び替えます。

o 配列の添え字は、1から順に付け直します。


**** 書式
--------
asort(並び替えたい配列 [, 並び替え結果])
--------

o この関数は、Gawkの拡張機能です。
o 並び替えたい配列 -- 他に指定がないと、この配列を直接変更します。
o 並び替え結果 -- 配列を返します。「並び替えたい配列」を直接変更したくない時に指定します。
   + 呼び出す時に、値を設定する必要はありません。
o 戻り値 -- 配列の要素数です。


**** 使用例
--------
BEGIN {
  a[1] = "158cm ミクさん";
  a[2] = "152cm リンちゃん";
  a[3] = "156cm レン君";
  a[4] = "162cm ルカ様";
  n = asort(a, b);

  print "ミクさん達の背比べ(小さい順)";
  for (i = 1; i <= n; ++i) {
    print i "番は、" b[i];
  }
}
--------

o asort 呼び出し後の、配列 b(並び替え結果)の内容
--------
b[1] = "152cm リンちゃん";
b[2] = "156cm レン君";
b[3] = "158cm ミクさん";
b[4] = "162cm ルカ様";
--------

o 実行結果
--------
ミクさん達の背比べ(小さい順)
1番は、152cm リンちゃん
2番は、156cm レン君
3番は、158cm ミクさん
4番は、162cm ルカ様
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
o 大きい順に表示したい時は、後ろから数えます。


**** 機能
o 配列の要素を、値の小さな順で並び替えます。
o 配列の添え字は、1から順に付け直します。
   + 「並び替え結果」の指定が無い時は、「並び替える配列」の添え字を直接変更します。

o 並び替え順序は、AWK処理系の大小判定の通りです。
   + 基本的には、文字列として比較します。"1" "11" "2" の順序で並びます。
   + 配列の要素に数値が混じっている時は、例外もあるみたいです。
   + 例えば、配列の要素の値が全て整数の時は、数値の小さい順(1 2 11)で並びました。
o 大文字小文字を区別したくない時、変数 IGNORECASEの値を設定すると、動作が変わります。
o 同じ値を持つ要素が複数あると、それらの要素は連続して並びます。「纏めて一つの要素にする」事はしません。
o この機能をサポートしていない処理系があります。

** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6


**** メモ
o Gawk以外では、AWKプログラムから、sortコマンドを呼び出す方法があります。
o もしくは、functionを使って、この機能と同等の事をする関数を作る事も出来ます。


**** 確認した処理系
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
    ▼制作メモ
    > asorti = 配列の添え字を取り出して並び替える(Gawk専用)
    SUBSEP = 配列の添え字の区切り文字
(2010年9月4日追加。戻り値)

他の方の便利メモ - AWK

AWKプログラムを書く
AWKの場合、愛好家達が、それぞれの趣味で資料を作って公開しています。
ここでは、Web検索で見つけた、Gawk3.1系を使う時に便利な情報サイトをご紹介します。


**** AWK攻略サイト = インターネット公開資料
** 機能説明書
o ▽Gawk: Effective AWK programming
   + 英語です。Gawkの新機能について勉強したい方は、こちらで勉強出来ます。
o Gawk on Windows(公開停止中) http://www.kt.rim.or.jp/~kbk
   + Gawkの日本語対応版と、Gawk 3.1.5向けドキュメントの日本語訳がありました。

** サンプルプログラム
o ▽AWK Users JP
   + 日本語です。AWKのサンプルプログラムが沢山ありました。

**
o この他に、Web検索すると、沢山見つかります。


**** AWK攻略情報のお手軽な探し方
** Gawk
o 機能の概要を掴みたい時は Web検索。他の方が書いた情報も、参考になります。
      + Gawkのドキュメントを確認したい時は、「gawk 検索したいキーワード」
      + 資料を集めたい時は、「awk 検索したいキーワード」も併用
o キーワードが分からない時は、上記の日本語訳の目次を見て、書いている場所を予想
o 関連情報も見つけたい時は、一番上のリンク「HTML (1820K bytes)」をクリックして、ページ内をキーワード検索

** mawk
o 基本的な仕様は、mawk付属の説明書(テキストファイル)の通りです。
o Gawkの情報も参考になります。

** awk
o 仕様は書籍「プログラミング言語AWK」の通りです。AWKの開発者達が書いています。
o Gawkの情報も参考になります。


==
関連ページ:
    ▼AWKプログラムを書く
    ▼AWK
    ▼制作メモ
    Gawkの操作説明書(マニュアル)をオンラインで見る方法
    mawkの操作説明書(マニュアル)をオンラインで見る方法
    the one true awk(オリジナルAWK)の実行オプション一覧