
gawk
Gawkでバグを見つけたのか、それともページの内容を誤って読んだのか、見逃したのかはわかりませんman
。
gawk
ページによると、man
互換モードでは、RS
複数の文字が含まれている場合、最初の文字のみが入力レコード区切り文字と見なされます。
記録
通常、レコードは改行で区切られます。組み込み変数に値を割り当てることで、レコードの分離方法を制御できます。RS
。もしRS
レコードを区切る単一文字です。そうでなければ、RS
正規表現です。この正規表現に一致する入力のテキストで区切られたレコード。ただし、互換モードでは、文字列値の最初の文字のみを使用してレコードを区切ります。もしRS
空の文字列に設定すると、レコードは空行で区切られます。いつRS
空の文字列に設定すると、改行は常に値に加えてフィールド区切り文字として機能します。FS
があるかもしれません。
そのため、実行時にgawk -P -- '1' RS="bar" <<<'foobarfoo'
次の結果が出ることが予想されます(すべてのページ-P
に互換モードがオンになっています)。gawk
man
foo
arfoo
ただし、実行すると次のようになります。
% gawk -P -- '1' RS="bar" <<<'foobarfoo'
foo
foo
互換モードが明示的にオンになっても同じことが起こります。
% gawk -c '1' RS="bar" <<<'foobarfoo'
foo
foo
明らかに互換モードでは、Gawkは実際にGNU拡張が有効になったときと同じ方法でレコードを分割します。私は何を見逃していますか?
これはLinux(Ubuntu 16.04 64ビット、Gawkバージョン:)にありますGNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
。
答え1
文書は非常に明確であるため、バグレポートを送信してください。
BWK(本当の奇妙なまたは元のawk)、文書で提案されているように動作します。 gawk開発者がこの詳細に関する他の参照実装を持っている場合は、それを文書化する必要があります。
愚かなテスト-c
(互換モード)、これはRS
質問で説明されているように、つまり文書とは異なる方法で処理されます。