2010年9月4日土曜日

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日追加。戻り値)