在 awk 中转义嵌套双引号

Escaping nested double quotes in awk

提问人:LincolnLogger 提问时间:8/21/2018 最后编辑:codeforesterLincolnLogger 更新时间:8/21/2018 访问量:435

问:

在 Windows Server 环境中,无法转义引号内的引号。使用以下正常运行的批处理代码作为基础:

awk -F "|" "$4 ~ /JUVENILE/ {sum +=$6} END {printf sum}" sourcedata.file

尝试包含到 printf 时出现问题。我很困惑,无法在我的环境中正确逃避这些引号。"%.3f"

awk -F "|" "$4 ~ /JUVENILE/ {sum +=$6} END {printf """%.3f""", sum}" sourcedata.file

上述方法命令提示符下有效,但在简单的批处理文件中无效。我还尝试替换为 and,这些在批处理文件中也不起作用。"%.3f"\"%.3f\"\""%.3f\""

Windows 批处理文件 awk printf 报价

评论

1赞 dawg 8/21/2018
我已经忘记了 Windows 引用,但在 Unix 中,您可以在程序外部使用,然后在脚本内部自由使用。试试这个。所以你的脚本变成了'"'$4 ~ /JUVENILE/ {sum +=$6} END {printf "%.3f", sum}'
0赞 Squashman 8/21/2018
如果在批处理文件或命令行中包含参数,则需要将百分比符号加倍,因为它用于变量扩展。
0赞 codeforester 8/21/2018
您可以在此处使用单引号:.请参阅 awk 中单引号和双引号之间的区别。刚刚意识到@dawg也这么说了。`awk -F '|' '$4 ~ /JUVENILE/ {sum +=$6} END {printf "%.3f", sum} sourcedata.file
1赞 Ed Morton 8/21/2018
伙计们 - OP 是在 Windows 上,而不是 UNIX,所以她坚持使用双引号作为命令行脚本。
1赞 aschipfl 8/22/2018
报价应该不是问题,而是在批处理文件中需要加倍的符号......如果报价确实会引起麻烦,你试过吗?%'%.3f'

答:

1赞 Ed Morton 8/21/2018 #1

Windows 避免噩梦般的引用规则的标准建议是:

a) 不要从 Windows 调用脚本。安装 cygwin 或类似设备以获取类似 UNIX 的环境,然后从中调用脚本,或者...

b) 不要在 Windows 的命令行上指定脚本文本,而是将其保存在一个文件中,即将它放在一个名为 :foo.awk

BEGIN { FS="|" }
$4 ~ /JUVENILE/ {sum +=$6}
END {printf "%.3f", sum}

然后执行它awk -f foo.awk sourcedata.file

评论

1赞 LincolnLogger 8/22/2018
在这种情况下,我的特殊错误是嵌套引号旁边的字符的结果。我在嵌套引号方面遇到了几个问题,并且成功地使用了这种方法。将来会使用;谢谢!