当前位置: 首页 > 面试题库 >

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

方英耀
2023-03-14
问题内容

在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中去了哪里?


问题答案:

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

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



 类似资料:
  • 问题内容: 我在Cygwin上安装了Python 3。但是,我无法通过安装Python 3软件包。有没有办法做到这一点? 问题答案: 1)在安装cygwin时,请确保从列表中安装python / python-setuptools。这将安装“ easy_install”软件包。 2)输入以下命令: 您必须将python版本替换为2.7或3.4或其他版本。

  • 问题内容: 如果我在.NET中没有记错的话,可以为未处理的异常注册“全局”处理程序。我想知道Java是否有类似的东西。 问题答案: 是的,有,但只有在没有设置时才会触发。

  • 问题内容: 我知道linux确实做了嵌套的中断,其中一个中断可以“抢占”另一个中断,但是其他任务呢。 我只是想了解linux如何处理中断。它们可以被其他用户任务/内核任务抢占吗? 问题答案: 简单答案:中断只能被更高优先级的中断所中断。 因此, 如果 中断的优先级低于内核调度程序中断优先级或用户任务中断优先级,则中断可以被内核或用户任务中断。 注意,“用户任务”是指 用户定义的中断 。

  • 问题内容: 我惊讶地发现以下作品: 由于我认为HAVING子句严格在SELECT子句之前进行处理。这实际上是我的错误假设吗?还是这是SAS的SQL实现所特有的? 问题答案: 严格来说,如果我没有记错的话,SQL标准的define子句要在该子句之前进行处理。因此,不能在in子句中使用SELECT中定义的别名。 这是: 因此,在大多数SQL版本中,该查询将产生错误。我知道MySQL是一个例外,它允许与

  • 我的问题是,如果我们有两个原始事件流,即烟雾和温度,并且我们想通过将运算符应用于原始流来找出复杂事件(即火灾)是否发生,我们可以在Flink中做到这一点吗? 我问这个问题是因为到目前为止,我所看到的Flink CEP的所有示例都只包括一个输入流。如果我错了,请纠正我。

  • 问题内容: 我知道,现在大多数处理器都有两个或多个内核,因此多核编程非常流行。有在Java中利用此功能的功能吗?我知道Java有一个Thread类,但是我也知道这是在多核流行之前的很长时间了。如果我可以使用Java中的多个内核,我将使用什么类/技术? 问题答案: Java是否支持多核处理器/并行处理? 是。它还是其他编程语言的平台,在该平台上,实现增加了“真正的多线程”或“真正的线程”卖点。在较新