2014-11-30 1 views
2

Я пытаюсь выполнить команду awk в моей программе go (команда awk вытаскивает почтовые индексы для указанного города, Сан-Франциско в этом случае, из файла с разделителями табуляции Калифорния почтовые индексы):Команда golang не работает, хотя вручную ее выполняет

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 он работает. Но, запуская его через мою программу, похоже, возникают проблемы. Я не уверен, что я делаю неправильно здесь. Я предполагаю, что я избегаю вещей неправильно, но ничего, что я пытаюсь, похоже, работает.

ответ

8

Я не думаю, что вам нужны одинарные кавычки вокруг аргументов. Они являются артефактом использования оболочки, которая запрещает интерпретации содержимого аргумента shell. Попробуйте без них.

+0

Ahhh, спасибо. Я попытался вытащить цитаты из предложения 'if', но не аргумент' \ t'. Вытащить одиночные цитаты из обоих сделали трюк! –

Смежные вопросы