我想从windows脚本(批处理文件)调用awk / gawk脚本。
我也想传入当前目录。所以我有以下几行:
gawk -v pwd=%cd% -f myscript.awk sometextfiletoprocess.txt
在批处理文件中如果我echo %cd%
我得到“c:\ dev \ work \ PIC \”
但是在awk脚本中,我在开始时有以下内容:
BEGIN {
print "pwd: " pwd
}
这给出了输出“c:devworkPIC” - 所以你可以看到我正在丢失所有斜杠。我猜awk不喜欢“\”?我怎样才能让我的斜线回来?
编辑我尝试在%cd%gawk -v pwd="%cd%" -f myscript.awk sometextfiletoprocess.txt
周围使用引号。这没有效果:(
答案 0 :(得分:3)
pwd="\foo\bar" awk 'BEGIN{pwd=ENVIRON["pwd"]; ...}'
解释转义序列(请参阅http://cfajohnson.com/shell/cus-faq-2.html#Q24),以便我猜测导致您出现问题的原因。
如果你想要包括从字面上传递给awk的转义,那么你应该使用ENVIRON:
awk 'BEGIN{pwd=ARGV[2]; ARGV[2]=""; ARGC--; ...}' file "\foo\bar"
或将其作为arg与文件名一起传递:
$ cat tst.awk
BEGIN {
print "pwd1:", pwd1
print "---"
pwd2=ENVIRON["pwd2"]
print "pwd2:", pwd2
print "---"
pwd3=ARGV[ARGC-1]; ARGV[ARGC-1]=""; ARGC--
print "pwd3:", pwd3
}
$ pwd2='c:\dev\work\PIC\' awk -v pwd1='c:\dev\work\PIC\' -f tst.awk 'c:\dev\work\PIC\'
awk: warning: escape sequence `\d' treated as plain `d'
awk: warning: escape sequence `\w' treated as plain `w'
awk: warning: escape sequence `\P' treated as plain `P'
pwd1: c:devworkPIC\
---
pwd2: c:\dev\work\PIC\
---
pwd3: c:\dev\work\PIC\
例如:
Access-Control-Allow-Origin : *
修改上述UNIX语法以执行正确的Windows咒语(或者更好的安装/使用cygwin)。