特定の文字列を含むセクションだけを抜き出す (続き)
以下からの続きです。
なんとなく見えているところとして、
という部分があります。
まず、Cygwin のマウントが binmode であることを確認します。(うちの環境なので細かな部分は無視してください)
$ mount C:\cygwin\usr\X11R6\lib\X11\fonts on /usr/X11R6/lib/X11/fonts type system (binmode) C:\cygwin\bin on /usr/bin type system (binmode) C:\cygwin\lib on /usr/lib type system (binmode) C:\cygwin on / type system (binmode) c: on /cygdrive/c type system (binmode,noumount) d: on /cygdrive/d type system (binmode,noumount) e: on /cygdrive/e type system (binmode,noumount)
つまり binmode でマウントされています。
ここで、特定の文字列を含むセクションだけを抜き出す (2) - 日本 GNU AWK ユーザー会 0.2で使用した Makefile を用いて実行してみます。
$ make -s (1) RS: none, ORS: none 0000000 \n \n 0000002 (2) RS: none, ORS: \n 0000000 \n \n 0000002 (3) RS: none, ORS: \r\n 0000000 \r \n \r \n 0000004 (4) RS: \n, ORS: none 0000000 \n \n 0000002 (5) RS: \n, ORS: \n 0000000 \n \n 0000002 (6) RS: \n, ORS: \r\n 0000000 \r \n \r \n 0000004 (7) RS: \r\n, ORS: none 0000000 \n \n \n 0000003 (8) RS: \r\n, ORS: \n 0000000 \n \n \n 0000003 (9) RS: \r\n, ORS: \r\n 0000000 \n \n \r \n 0000004
みごとに2007-10-11 - 木っ端拾いの材木流しで書かれていることが再現されました。
次に怪しいのが gawk の BINMODE です。
実行してみましょう。
$ make -s AWK='gawk -v BINMODE="r"' (1) RS: none, ORS: none 0000000 \r \n \r \n 0000004 (2) RS: none, ORS: \n 0000000 \r \n \r \n 0000004 (3) RS: none, ORS: \r\n 0000000 \r \r \n \r \r \n 0000006 (4) RS: \n, ORS: none 0000000 \r \n \r \n 0000004 (5) RS: \n, ORS: \n 0000000 \r \n \r \n 0000004 (6) RS: \n, ORS: \r\n 0000000 \r \r \n \r \r \n 0000006 (7) RS: \r\n, ORS: none 0000000 \n \n 0000002 (8) RS: \r\n, ORS: \n 0000000 \n \n 0000002 (9) RS: \r\n, ORS: \r\n 0000000 \r \n \r \n 0000004
というわけで、Linux と同じ挙動になりました。
要するに Cygwin では gawk でよしなに変換してくれていたということになるということでしょうか?
すっきりしてないのですが、改行を含めて Unix 系 OS と同じにするなら BINMODE で実行するのが望ましいのかもしれません。
昔 gawk で httpd を作成したときも Cygwin だけバイナリを通すと挙動が異なっていたのですが、この辺が影響していたのかもしれません。
・・・曖昧でスミマセン。