木っ端拾いの材木流し

Cannot see the wood for the trees.

Cygwin上のAWKでの改行コードの扱われ方

特定の文字列を含むセクションだけを抜き出すの続き。

すっきりしてないのですが、改行を含めて Unix 系 OS と同じにするなら BINMODE で実行するのが望ましいのかもしれません。

特定の文字列を含むセクションだけを抜き出す (続き) - 日本 GNU AWK ユーザー会 0.2

情報ありがとうございます m(_ _)m CygwinだけでなくGAWKにもBINMODEというのがあったのですね。調べてみたらGAWKのドキュメントに記述がありました。

Under OS/2 and DOS, gawk (and many other text programs) silently translate end-of-line "\r\n" to "\n" on input and "\n" to "\r\n" on output.

http://www.kt.rim.or.jp/~kbk/gawk-3.1/gawk.html#SEC257

Cygwin上のGAWKを「Under OS/2 and DOS」と呼んでいいか微妙ですが、GAWKが"\r\n"を"\n"に変換しているようです。で、BINMODE=rとすると入力ファイルの改行コードをそのままGAWKで処理すると。勉強になりました。
(10/19追記)
AWKの偉い人らしいきむらさん*1が調査結果を公開されていました。ありがとうございます。
本当はちゃんと書きたかったのですが時間がないため簡単なご紹介のみでご容赦下さい。

手順としては

  • Cygwin上のCプログラムで入力の改行コードが自動変換されることを確認
  • AWKデバッグモードで動かして、最初の入力時点で改行コードが自動変換されることを確認
  • ソースを追いかけてlibcが原因と特定

という流れです。
問題解決力の高さは問題を切り分ける分解能の高さからくるんだなと感じます。

*1:よく見たら上のGNU Awk ユーザーズガイドの訳者さんじゃないか!