小编典典

awk CR LF处理是否在cygwin上中断?

linux

在Linux上,它按预期运行:

$ echo -e "line1\r\nline2"|awk -v RS="\r\n" '/^line/ {print "awk: "$0}'
awk: line1
awk: line2

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

视窗:

$ echo -e "line1\r\nline2"|awk -v RS="\r\n" '/^line/ {print "awk: "$0}'
awk: line1
line2

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

这是带有gawk的Solaris:

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

这是cygwin和gawk:

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

RS 只是默认的换行符,所以control-M在cygwin中去了哪里?


阅读 279

收藏
2020-06-07

共1个答案

小编典典

我刚刚与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

如果有兴趣,请参见手册页以获取更多信息。

2020-06-07