我正在尝试awk
在go程序中执行命令(awk命令从加利福尼亚邮政编码的制表符分隔文件中提取指定城市(在这种情况下为San Francisco)的邮政编码):
cmd := exec.Command(
"awk",
"-F",
"'\\t'",
"'{if ($4 == \"SAN FRANCISCO\") print $0; }'",
"zipcodes_ca.txt",
)
fmt.Println(cmd.Args)
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
return
}
输出:
[awk -F '\t' '{if ($4 == "SAN FRANCISCO") print $0; }' zipcodes_ca.txt]
exit status 2: awk: syntax error at source line 1
context is
>>> ' <<<
awk: bailing out at source line 1
如果我从命令中获取打印的参数,并将其作为命令运行,awk -F '\t' '{if ($4 == "SAN FRANCISCO") print $0; }' zipcodes_ca.txt
它将起作用。但是,通过我的go程序运行它似乎有问题。我不确定我在做什么错。我猜我在错误地进行转义,但是我尝试的任何方法似乎都没有效果。
我认为您不需要在参数周围使用单引号。它们是使用shell的产物,可防止shell解释自变量内容。尝试没有它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句