Compatibility

awk4j (AWK for Java Platform)

GNU AWK との互換性について

GNU AWK との互換性検証のため、 gawk 3.16 に含まれる検証用スクリプト (./test ディレクトリのテスト 268 ケース) の確認結果を以下に示す。

無修正で実行可能なもの

GNU AWK の実行結果と 標準出力データの内容 (バイナリ比較) が一致するもの  (182 ケース)

addcomma, anchgsub, arrayprm2, arrayprm3, arrayref, arrymem1, arryref2, arynasty, arynocls, aryprm8, arysubnm, asgext, asort, asorti, backgsub, backw, binmode1, clsflnam, compare, compare2, concat1, concat2, concat3, concat4, convfmt, datanonl, delarpm2, delarprm, dynlj, eofsplit, exitval1, fldchg, fldchgnf, fmttest, fordel, forsimp, fsbs, fsrs, fsspcoln, fstabplus, funsemnl, gensub, gensub2, getline, getline2, getline3, getlnbuf, getnr2tb, getnr2tm, gnuops2, gnuops3, gnureops, gsubtest, gsubtst2, gsubtst3, gsubtst4, gsubtst5, hex, hsprint, icasers, igncdym, igncfs, ignrcas2, ignrcase, inputred, intest, intformat, intprec, iobug1, leaddig, leadnl, lintold, litoct, longsub, longwrds, manglprm, manyfiles, math, membug1, messages, minusstr, mmap8k, mtchi18n, nasty, nasty2, negexp, nested, nfldstr, nfset, nlfldsep, nlinstr, nlstrina, noeffect, nofmtch, noloop1, noloop2, nondec, nonl, nors, nulrsend, numindex, numsubstr, octsub, ofmt, ofmtbig, ofmtfidl, ofmts, onlynl, opasnidx, opasnslf, paramtyp, parse1, parsefld, pcntplus, pipeio1, pipeio2, posix, prdupval, prec, printf0, printf1, printfloat, printlang, prmreuse, prt1eval, prtoeval, psx96sub, rebuf, redfilnm, regeq, reint, reint2, reparse, resplit, rs, rsnul1nl, rsnulbig, rsnulbig2, rsstart1, rstest1, rstest2, rstest3, rstest4, rstest5, rstest6, rswhite, shadow, sort1, sortempty, space, splitargv, splitarr, splitdef, splitvar, splitwht, sprintfc, strcat1, strnum1, strtod, strtonum, subamp, subi18n, subsepnm, subslash, substr, swaplns, switch2, tweakfld, uninit2, uninit3, uninit4, uninitialized, wideidx, wideidx2, widesub, widesub2, widesub3, widesub4, wjposer1, zero2, zeroe0, zeroflag

言語仕様の範囲内で結果が一致するものもの

標準出力データの内容は不一致であるが言語仕様の範囲内で正しいもの  (10 ケース)

argarray, argtest
ARGV[0] の内容は、実行コマンド(文字列)ではない

Note: AWK(C言語インターフェイス) では実行プログラム名が格納されるが Java にはその概念はない

fnarydel, fnparydl
連想配列の添字が選ばれる順序は実装方式に依存する

for (var in array) print var

double1, double2, fmtspcl, inftest, ovrflow1, rand
浮動小数点ライブラリの精度、乱数値は実装ライブラリに依存する

ソケット通信  (4 ケース)

inetdayt, inetdayu, inetecht, inetechu
IP および PORT アドレスをテスト環境に合わせて設定する

言語仕様上で非互換となるもの

互換性のない正規表現  (4 ケース)

♪ awk4j の正規表現は GNU AWK 仕様を全てカバーするが 衝突する仕様は切り捨てている

back89
正規表現で使用する 8 進値は 0 で始める必要がある (前方参照指定 \1 ~ \9 と衝突)
funstack
正規表現中の "{" は、メタキャラクタ (範囲指定 {min, max} と衝突)
tradanch
Standard Unix AWK 正規表現との互換性確認 (過去仕様との互換性なし)
reindops
エスケープなしのメタキャラクタ使用 /^+/ (一般的には /\+/)

国際化対応 (i18n) 上の問題  (4 ケース)

localenl
GNU AWK で使用している MBCS(MultiByte Character Set) 固有の LOCALE 問題
rebt8b1, regx8bit
UNICODE と MBCS 方式で 文字コード長と表示文字幅に差異がある場合 ("ú" など) の問題
rebt8b2
コード系依存のバイナリデータによる文字列置換 (文字コード依存)

Unix 環境に依存した機能の利用  (9 ケース)

♪ プラットフォームに強く依存する機能は実装していない

devfd, devfd1, devfd2
ファイル記述子(4) "/dev/fd/4" 以上を指定したファイルアクセス
exitval2
外部プロセスが shell 環境で動作していることを前提とした組み込み関数 read の利用
fflush, pid, poundbang, regtest
環境依存の問題確認
getlnhd
外部プロセスが shell 環境で動作していることを前提としたヒヤドキュメント機能 << の利用

♭ 未実装の GNU AWK 独自拡張機能  (12 ケース)

childin
子プロセスで、親(自分自身)の標準入力から入出は未サポート
"cat" | getline
clos1way
プロセスに対する双方向パイプ |% 入出力は未サポート
fieldwdth, fsfwfs, fwtest, fwtest2
FIELDWIDTHS、 固定長のフィールド入力機能 (ASCII コード以外では期待通りの動作とならないため未サポート、 スクリプトでの自作を推奨)
match1, match2
match(string, regexp , array) マッチした部分文字列配列の取得
nondec2
--non-decimal-data によるバイナリデータ設定機能
procinfs
未サポートの拡張機能 PROCINFO の利用
strftime, strftlng
互換性のない時間関数の変換書式 (%b など) の利用

GNU AWK 拡張仕様で適切でないと思われるもの

♭ GNU AWK 拡張仕様で適切でないと思われるもの  (4 ケース)

clobber
開いている入力ストリームへの上書きを許す
icasefs
IGNORECASE 設定時に FS の値を内部記憶、その後の変更を無視する
rsstart2, rsstart3
RS の設定によりレコード長が 0 となる場合の NR 値

検証対象外

構文解析機能の確認

GNU AWK で AWK言語仕様エラーを確認するためのスクリプト  (35 ケース)

arrayparm, arryref3, arryref4, arryref5, aryprm1, aryprm2, aryprm3, aryprm4, aryprm5, aryprm6, aryprm7, defref, delfunc, fnamedat, fnarray, fnarray2, fnaryscl, fnasgnm, fnmisc, funsmnam, gsubasgn, lint, nfneg, nofile, noparms, paramdup, parseme, printfbad1, prmarscl, scalar, sclforin, sclifin, synerr1, synerr2, unterm

GNU AWK の構文解析およびコンパイルオプションの確認をおこなうもの  (4 ケース)

awkpath, badargs, mixed1, whiny

AWK 関連リンク

Gawk - GNU Project - GNU AWK 本家