[英]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.