【问题标题】:pipe inside (awk) System command in cpp管道内(awk)cpp中的系统命令
【发布时间】:2015-05-11 09:18:58
【问题描述】:

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

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

得到错误,

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

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

【问题讨论】:

标签: c++ string awk pipeline


【解决方案1】:

你只需要转义\:

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 前缀意味着\ 不再被解释为转义字符。

【讨论】:

    【解决方案2】:

    可能会忽略 -F"|"引号??

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多