在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?
我刚刚与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)
如果感兴趣,请参阅手册页以获取更多信息.