awk CR LF处理是否打破了cygwin?

jca*_*314 9 linux bash awk

在Linux上,这按预期运行:

$ echo -e "line1\r\nline2"|awk -v RS="\r\n" '/^line/ {print "awk: "$0}'
awk: line1
awk: line2
Run Code Online (Sandbox Code Playgroud)

但在windows下\ r \n被删除(awk认为这一行):

视窗:

$ echo -e "line1\r\nline2"|awk -v RS="\r\n" '/^line/ {print "awk: "$0}'
awk: line1
line2
Run Code Online (Sandbox Code Playgroud)

Windows GNU Awk 4.0.1 Linux GNU Awk 3.1.8

来自@EdMorton的编辑(对不起,如果这是一个不需要的补充,但我认为这可能有助于证明问题):

考虑这个RS设置和输入(在cygwin上):

$ awk 'BEGIN{printf "\"%s\"\n", RS}' | cat -v
"
"
$ echo -e "line1\r\nline2" | cat -v
line1^M
line2
Run Code Online (Sandbox Code Playgroud)

这是带有gawk的Solaris:

$ echo -e "line1\r\nline2" | awk '1' | cat -v   
line1^M
line2
Run Code Online (Sandbox Code Playgroud)

这是与gawk的cygwin:

$ echo -e "line1\r\nline2" | awk '1' | cat -v
line1
line2
Run Code Online (Sandbox Code Playgroud)

RS 只是它的默认换行符所以控件-M在哪里进入cygwin?

Ed *_*ton 7

我刚刚与Arnold Robbins(gawk的提供者)进行了核实,答案是它是由C库完成的,为了阻止它发生,你应该将awk BINMODE变量设置为3:

$ echo -e "line1\r\nline2" | awk '1' | cat -v
line1
line2

$ echo -e "line1\r\nline2" | awk -v BINMODE=3 '1' | cat -v
line1^M
line2
Run Code Online (Sandbox Code Playgroud)

如果感兴趣,请参阅手册页以获取更多信息.