New functions of gawk

オリジナルに近い one true awk と gawk の違いとして、gawk の最新機能を説明します。

[Go to Index]

関数

asort( STRING[, DUPLICATE] )

配列 SRRING の要素数を返します。配列 STRING の中身は gawk 標準の値の比較でソートされます。ソートされた配列のインデックスは 1 から順に整数で揃えられた配列に置き換えられます。配列 DUPLICATE が指定された場合には配列 DUPLICATE に代入され、配列 DUPLICATE がソートされます。この時、配列 STRING は変更されません。また変数 IGNORECASE の影響を受けます。

このことは下記のようなプログラムで検証することができます。前半は DUPLICATE を省略した時の振る舞いで、後半は DUPLICATE を使用した場合の振る舞いです。

#! /usr/local/bin/gawk -f
#-----
# test of asort
#-----
BEGIN {
  #-----
  # check asort( STRING )
  #-----
  #-----
  # initialize the test array
  #-----
  InitArray();
  #-----
  # get the number of array with asort()
  #-----
  NumArray = asort( Array );
  printf( "===== asort( STRING )\n" );
  for ( i = 1; i <= NumArray; i++ ) {
    printf( "Array[%d] = \"%s\"\n", i, Array[i] );
  }
  #-----
  # check asort( STRING, DUPLICATE )
  #-----
  #-----
  # initialize the test array
  #-----
  InitArray();
  #-----
  # get the number of array with asort()
  #-----
  NumArray = asort( Array, Dupli );
  printf( "===== asort( STRING, DUPLICATE )\n" );
  for ( i = 1; i <= NumArray; i++ ) {
    printf( "Array[%d] = \"%s\" \"%s\"\n", i, Array[i], Dupli[i] );
  }
}

#-----
# initialize the test array
#-----
function InitArray() {
  Array[1] = "aardvark";
  Array[2] = "animal";
  Array[3] = "zebra";
  Array[4] = "zoo";
  Array[5] = "Iguana";
  Array[6] = "Alligator";
  Array[7] = "Nouns";
  Array[8] = "people";
  NumArray = 0;
}

AWK で sort 関数を待ち望んでいた人も多いのではないでしょうか。sort 関数を AWK で使う場合には再帰呼び出しをしたり配列の入れ替えなどで思った以上に大変だったと思いますが、これでスマートに gawk が使用できると思います。

Copyright © 2003 by Hirofumi Saito <hi_saito@yk.rim.or.jp>. All rights reserved.