在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中去了哪里?
RS
我刚刚与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
如果有兴趣,请参见手册页以获取更多信息。