awkの発展
このマニュアルでは、POSIX規格に従ったGNUのawk処理系について
の説明をしている。多くのawkユーザーは、Version 7 UNIX上でのオリジ
ナルawkだけを知っている(この処理系は 4.3 --RenoまでのBerkeley UNIX
上のawkの元となった。Berkeley UNIX の リリース4.4 では、システム
のawkにgawk 2.15.2を使用している)。この章ではawk言
語の進化を、(より詳しい説明のある場所の)クロスリファレンスを交えて手短に
説明する。
awk言語はVersion 7 Unix (1978)と、System V Release 3.1 (1987)で最初に
作られた新しいバージョンとの間で相当に進化した。このセクションでは変更と、
それについてのクロスリファレンスを要約する。
awk の文と行を参照).
delete 文 (セクション The delete Statementを参照).
do-while 文
(セクション The do-while Statementを参照).
atan2, cos, sin, rand, srand
(セクション Numeric Built-in Functionsを参照).
gsub, sub, match
(セクション Built-in Functions for String Manipulationを参照)。
closeとsystem
(セクション Built-in Functions for Input/Outputを参照)。
ARGC, ARGV, FNR, RLENGTH,
RSTART,SUBSEP(セクション 組み込み変数を参照)。
awkプログラムで破られていた演算子の優先順位を
Cと同じにした(セクション Operator Precedence (How Operators Nest)を参照)。
FSにセットする値
(セクション フィールドの分割方法の指定を参照)と
split関数の三番目の引数として正規表現を許す
(セクション Built-in Functions for String Manipulationを参照)。
awkを
`¥b'、`¥f'、`¥r'を認識するように
変更していたが、それはあなたが信頼できるものではない)。
getline関数に対する入力のリダイレクト
(セクション getlineを使った入力を参照).
BEGINルールとENDルール
(セクション 特殊パターンBEGINとENDを参照).
UNIX System V Release 4 versionのawkでは次のような機能が追加されて
いる(このうちの幾つかはgawkがオリジナルである)
ENVIRON 変数 (セクション 組み込み変数を参照)。
srandが返す値の定義
(セクション Numeric Built-in Functionsを参照)。
toupper と tolower
(セクション Built-in Functions for String Manipulationを参照).
printf関数の書式指定文字`%c'の仕様の明確化
(セクション 書式制御文字を参照)。
printf関数の引数リスト中で("%*.*d")の様にフィールド幅や、精度
を動的に与える機能
(セクション 書式制御文字を参照).
$0 ‾/foo/の様に、マッチングオペレータを使用したときと等価な
/foo/の様な正規表現定数
(セクション 正規表現定数を使うを参照)。
awk
POSIX のコマンド言語およびユーティリティの標準は、awkに次のような
言語の変更を導入した。
CONVFMTの使用
(セクション Conversion of Strings and Numbersを参照)。
以下の一般的な拡張はPOSIX標準では許されていない。
¥xで指定されるエスケープシーケンスを認識しない。
(セクション エスケープシーケンスを参照).
FS is
equal to a single space.
functionの略語として funcを認めない
(セクション Function Definition Syntaxを参照)。
FSの
値をタブにセットしない
(セクション フィールドの分割方法の指定を参照)。
fflushをサポートしない
(セクション Built-in Functions for Input/Outputを参照)。
awk
オリジナルのawkの開発者の一人であるBrian Kernighanは、
彼の作成した処理系を匿名ftpを通じて入手可能な
状態に置いている
(セクション 自由に入手可能な他のawk処理系を参照)。
このセクションでは、彼の作成したawk処理系のPOSIX awkにはない
拡張機能を説明する。
fflush
(セクション Built-in Functions for Input/Outputを参照)。
awkにはないgawkの拡張
GNU の実装による gawkには、多くの機能が追加されている。
このセクションでは、そのような機能をとりあげる。
拡張機能は`--traditional' オプションや
`--posix'オプションによって禁止することができる
(セクション コマンドラインオプションを参照)。
gawkのバージョン 2.10では以下の機能が導入された。
AWKPATH環境変数。
(セクション コマンドラインオプションを参照).
IGNORECSE変数とその効果。
(セクション 大小文字を区別するマッチングを参照).
gawkを参照)。
gawkバージョン2.13では以下の機能が導入された。
FIELDWIDTHS変数とその効果
(セクション 固定長データの読み込みを参照)・
systime と strftime
(セクション Functions for Dealing with Time Stampsを参照)。
gawkバージョン2.14では以下の機能が導入された。
next file文
(セクション The nextfile Statementを参照)。
gawkバージョン2.15では以下の機能が導入された。
FILENAMEがARGVのどこにあるかを示す
ARGINDという変数 (セクション 組み込み変数を参照)。
getline が -1を返したり、close が失敗したときの
システムのエラーメッセージを保持するERRNOという変数
(セクション 組み込み変数を参照)。
gawkを参照).
gawkのバージョン3.0では以下の機能が導入された。
next file文はnextfileに変更された
(セクション The nextfile Statementを参照)。
awkにない機能を
警告するための`--lint-old'オプション
(セクション Major Changes between V7 and SVR3.1を参照)。
FSに空文字列がセットされたときの動作と、
splitの第三引数に空文字列を渡したときの動作。
(セクション 個々のキャラクタを別個のフィールドにするを参照).
RSが正規表現のときの動作。
(セクション 入力をレコードへと分割をするやりかたを参照).
RT変数
(セクション 入力をレコードへと分割をするやりかたを参照).
gensub関数
(セクション Built-in Functions for String Manipulationを参照)。
strftime関数が引数なしで呼べるようにデフォルトの
時間フォーマットを獲得した
(セクション Functions for Dealing with Time Stampsを参照)。
IGNORECASEの値が、文字列比較だけでなく、正規表現演算にも
適用されるようになった
(セクション 大小文字を区別するマッチングを参照).
awkにあった
`-m'オプションとfflush関数
(セクション コマンドラインオプションを参照と
セクション Built-in Functions for Input/Outputを参照)。
gawk for Unixを参照).
gawk のインストールを参照)。