pipe inside(awk)cpp中的系统命令

时间:2015-05-11 09:18:59

标签: c++ string awk pipeline

我有awk命令,我想包装在system()中。

std::string cmd = "awk -F\|  '{ var1=$2; var2=$5; print var1, var2 }' 1.txt";
system(cmd.c_str());

将错误视为,

  

错误:未知转义序列' \ |'

我试过用不同的方式给出引号。但是,没有任何帮助。

2 个答案:

答案 0 :(得分:2)

您只需要转义\

std::string cmd = "awk -F\\|  '{ var1=$2; var2=$5; print var1, var2 }' 1.txt";
//-----------------------^

当您创建C ++字符串时,\被视为转义字符,除非您将其转义。

或者在这种情况下,您可以引用分隔符,避免转义它:

std::string cmd = "awk -F'|'  '{ print $2, $5 }' 1.txt";

我认为你的剧本可能比现实中更复杂,但无论如何我都会为你简化,以防万一。

最后一个选项,使用原始字符串文字(在C ++ 11中受支持):

std::string cmd = R"awk -F\|  '{ print $2, $5 }' 1.txt";

R前缀表示\不再被解释为转义字符。

答案 1 :(得分:0)

也许是在-F" |"引号??

std::string cmd = "awk -F\"|\" '{ var1=$2; var2=$5; print var1, var2 }' 1.txt";
system(cmd.c_str());