我每天都要处理日志文件。我一直使用 sed 来实现提取时间戳之间的某些数据行的目标。例如,我使用:
sed '/20150720 15:06:00/,/20150720 16:25:00/! d' logfile.log > /tmp/logpart.log
但是,这仅当时间戳与文件中的一行实际匹配时才有效。如何强制 sed 处理我想要的数据,而不必进入文件获取实际时间戳?例如,在上面的例子中,我只想要 15:00 到 16:30 之间的所有内容,而不管文件中是否有匹配的时间戳。
答案1
由于您的日志文件具有按字典顺序排序的时间戳,因此您可以使用 awk 简单地比较字符串,例如:
awk 'substr($0,1,17)>="20150720 15:06:00" && substr($0,1,17)<="20150720 16:25:00"' <logfile.log
我在这里假设您的时间戳从第 1 列开始(从 1 开始编号)。如果不是,请进行,1,
相应更改。