Windows 转义awk中的嵌套双引号
在Windows Server环境中,转义引号中的引号时遇到问题。使用以下正常运行的批处理代码作为基础:Windows 转义awk中的嵌套双引号,windows,batch-file,awk,printf,quotes,Windows,Batch File,Awk,Printf,Quotes,在Windows Server环境中,转义引号中的引号时遇到问题。使用以下正常运行的批处理代码作为基础: awk -F "|" "$4 ~ /JUVENILE/ {sum +=$6} END {printf sum}" sourcedata.file 尝试将“%.3f”包含到printf时出现问题。我感到困惑,无法在我的环境中正确地避开这些引用 awk -F "|" "$4 ~ /JUVENILE/ {sum +=$6} END {printf """%.3f""", sum}" source
awk -F "|" "$4 ~ /JUVENILE/ {sum +=$6} END {printf sum}" sourcedata.file
尝试将“%.3f”
包含到printf时出现问题。我感到困惑,无法在我的环境中正确地避开这些引用
awk -F "|" "$4 ~ /JUVENILE/ {sum +=$6} END {printf """%.3f""", sum}" sourcedata.file
上述操作将在命令提示下运行,但在简单的批处理文件中不起作用。我还尝试将
“%.3f”
替换为“%.3f\”
和“%.3f\”
,这些在批处理文件中也不起作用。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执行
我忘记了Windows引用,但在Unix中,您可以在程序外部使用'
,然后在脚本内部自由使用“
。试试这个。这样您的脚本就变成了'$4~/sum/{sum+=$6}END{printf%.3f',sum}“
如果在批处理文件或命令行中包含参数,则需要将百分比符号加倍,因为它用于变量扩展。您可以在此处使用单引号:awk-F'|'$4~/sum/{sum+=$6}END{printf'%.3f',sum}”sourcedata.file
。请参见。刚刚意识到@dawg也这么说。“伙计们-OP在Windows上,而不是UNIX上,所以她一直坚持在命令行脚本中使用双引号。引号不应该是问题所在,但批处理文件中需要加倍的%
符号……如果引号确实会造成问题,您尝试过%”.3f'
?在本例中,我的特殊错误是嵌套引号旁边的字符导致的。我在嵌套引号中遇到了一些问题,并成功地使用此方法进行了测试。将在将来使用;谢谢!