Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 转义awk中的嵌套双引号_Windows_Batch File_Awk_Printf_Quotes - Fatal编程技术网

Windows 转义awk中的嵌套双引号

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

在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}" 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'
?在本例中,我的特殊错误是嵌套引号旁边的字符导致的。我在嵌套引号中遇到了一些问题,并成功地使用此方法进行了测试。将在将来使用;谢谢!