繁体   English   中英

使用Windows的UNIX工具在Windows上的AWK中打印换行符

[英]Print a newline using awk on windows using unix tools for Windows

我为Windows安装了Unix工具,但是无法使用awk打印换行符。 我已经尝试了所有开关:\\ n,但是似乎没有任何效果。 对你的帮助表示感谢。

我的输入(c:\\ temp \\ servers.txt)“

123 0 1
234 1 1

这是我的脚本:

for /F "tokens=1" %%A In (c:\temp\servers.txt) DO awk "$2 == "0" {print $6,\n }" input.txt

Windows不能接受命令参数中的单引号-这意味着您需要在Windows上将awk命令放在双引号中,这意味着您不能对print语句和字符串使用双引号-grrrr!

因此,将awk命令放到名为script.awk的文件中比较容易,如下所示:

BEGIN{ORS="\r\n"}
$2==0{print $1}

这就是说...用回车键和换行符分隔所有输出行(就像Windows一样),然后在第二个字段为零的任何行上打印第一个字段。

然后执行以下操作:

awk -f script.awk C:\servers.txt

打印换行符最简单的方法就是使用print "" 输出记录分隔符ORS (默认为换行符)将附加到空字符串中。

如果您已经有一条print语句,并且想在输出中添加其他换行符,则可以自己使用ORS变量,例如print $6 ORS

这种方法比在脚本中对字符“ \\ r \\ n”或“ \\ n”进行硬编码相比更具可移植性,因为ORS的默认值应仅对运行的系统有效(即,它应该已经在Windows上为“ \\ r \\ n”,在其他大多数系统上为“ \\ n”)。

打印包含嵌入式换行符的字符串的示例;

'\\ n'是一个转义序列,用于表示换行符

$ awk 'BEGIN { print "line one\nline two\nline three" }'
-| line one
-| line two
-| line three

也许本文会为您提供更多帮助: https : //www.gnu.org/software/gawk/manual/html_node/Print-Examples.html

这个问题有多种解决方案,您可以尝试看看哪一种最适合您

在Windows中,必须在命令行脚本中使用双引号,并且必须使用反斜杠对嵌入式双引号进行转义,如下所示:

C:\Users\ReluctantBiosGuy>gawk "BEGIN{print \"line one\nline two\nline three\"}"
line one
line two
line three

C:\Users\ReluctantBiosGuy>

对于您的原始脚本,我看不到您为什么尝试使用command.com的FOR命令,也不清楚您真正要打印的内容。 但是,以下内容应为您提供足够的信息来完成您真正想要做的事情:

C:\Users\ReluctantBiosGuy>type x
123 4 5
132 0 4
153 0 33
384 3 88

C:\Users\ReluctantBiosGuy>gawk "$2==0{printf(\"Token 1 is %s\n\n\",$1)}" x
Token 1 is 132

Token 1 is 153


C:\Users\ReluctantBiosGuy>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM