我在Linux中使用基于C ++的模拟器(ndnSIM)。执行某些任务后,它会通过此命令在stdout
中每秒打印一个输出:
L3RateTracer::InstallAll ("-", Seconds (1));
。这是常量,我无法更改其格式以在字符串或数组中打印输出。我想从stdout
的此输出中提取特定数据。例如,第1秒的输出已打印在stdout
中,如下所示(每个要素之间的空格按Tab键):
1 C1 0 1 Out1 268 335 0
1 C1 0 2 Out2 0 0 0
1 C2 1 1 Out1 0 0 0
1 R3 1 1 Out2 317 0 0
1 P1 -1 all Sat1 268 0 335
1 C1 -1 all Tim1 0 0 0
1 R2 1 9 Out1 0 0 0
我需要为第二列中的“R3”和第5列中的“Out2”输出提取第6列数据。在此示例中,所需的值为“317”。
如何通过C ++从stdout
的打印输出中每秒提取此值(= 317)?
答案 0 :(得分:1)
如果您不需要,您不想使用正则表达式或其他任何内容。
你需要做的是读取文件,用标签和/或空格拆分,我无法分辨,然后检索你想要的元素。
了解如何在此处拆分字符串: Split a string in C++?
从stdin
读取,这就是你想要做的事情,你需要这样做:
std::string line;
std::getline(std::cin, line);
当与上面的字符串拆分方法结合使用时,它会非常有效。
然后,您就可以ToolThatPrintsThings | YourNewTool
答案 1 :(得分:0)
使用awk
:
ndnSIM | awk '{print $6}' | yourProg
现在yourProg
只需要使用cin::getline()
读取每一行,该行将是ndnSIM输出的第6列。