通过C++从标准输出中的一些打印数据中提取特定值

Extract a specific value from some printed data in stdout by C++

本文关键字:提取 数据 打印 C++ 标准输出 通过      更新时间:2023-10-16

我在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

我需要为那些在第 2 列中为"R3"和第 5 列中的"Out2"的输出提取第 6 列数据。在此示例中,所需值为"317"。

如何按C++每秒从stdout的打印输出中提取此值 (=317(?

如果没有必要,您不想为此使用正则表达式或任何东西。

您需要做的是读取文件,按制表符和/或空格拆分它,我无法分辨,然后检索您想要的元素。

在此处阅读有关如何拆分字符串的信息:将字符串拆分为C++?

要从stdin读取,这就是您想要执行的操作,您需要执行以下操作:

std::string line;
std::getline(std::cin, line);

当与上面的字符串拆分方法结合使用时,它将非常有效。然后,您将能够ToolThatPrintsThings | YourNewTool

使用 awk

ndnSIM | awk '{print $6}' | yourProg

现在yourProg只需要用 cin::getline() 读取每一行,这将是 ndnSIM 输出中的第 6 列。