我有一个不断更新的文本文件,其中包含如下行:
On 29-08-2018 18:30:29:05 bacteria detected 20 Machine learning error 10
等等(我每秒都会收到一条新线)。
18:30:29
我将从我的 C++ 程序中获取开始和停止时间(格式为)。这是正确的方法吗?
string er = "system ./RUN.sh ";
er = er + start + stop;
system(er.c_str());
然后在 .sh 文件中执行以下操作
read start
read stop
为了读取输入
我的下一个问题是如何从文件中读取该行以搜索相关时间并复制整行,直到停止时间到达新文件?
我正在搜索相关时间的文件已复制到新位置,并且不会更新,只会在下一次 .sh 运行时替换
该算法将类似于:
if (Log_29-08-2018.txt->readline() contain "18:30:29")
while (RESULT.txt->readline() not contain "20:30:29")
/MINI_LOG/Log_29-08-2018.txt->writeline()
Log_29-08-2018.txt->readline()
done
fi
而且我还需要/MINI_LOG/Log_29-08-2018.txt
在下次运行时更新该文件,除非是另一天。
每一天我都会收到一个新的源文件,这样就不会出现任何时间重复
我已经看过你的例子,但它们并不完全是我需要的,它给了我很多错误。
答案1
awk是一个很好的工具:代码紧凑,性能良好。 RUN.sh 看起来像
#!/bin/sh
awk -v start="$1" -v stop="$2" '
$3 ~ "^"start {p = 1}
$3 ~ "^"stop {p = 0}
p
' logfile > resultfile