Sed-仅提取具有特定时间戳的文件部分

Sed-仅提取具有特定时间戳的文件部分

我每天都要处理日志文件。我一直使用 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,相应更改。

相关内容