我试图找出如何记录数百万行的日志 一天,轻松转储行的范围(基于开始和结束时间戳) 另一个文件。以下是日志的摘录,以显示它是如何构建的:
00:04:59.703: <abcxyz,v1 from YYY::Process at 14 Nov 2012 07:04:59>
00:04:59.703: 20121114070459 - XXX - 7028429950500220900257201211131000000003536
00:04:59.703: </abcxyz,v1>
00:04:59.711: <abcxyz,v1 from YYY::Process at 14 Nov 2012 07:04:59>
00:04:59.711: 20121114070459 - XXX - 7028690080500220900257201211131000000003538
00:04:59.711: </abcxyz,v1>
00:04:59.723: <abcxyz,v1 from YYY::Process at 14 Nov 2012 07:04:59>
00:04:59.723: 20121114070459 - XXX - 7028395150500220900257201211131000000003540
00:04:59.723: </abcxyz,v1>
00:04:59.744: <abcxyz,v1 from YYY::Process at 14 Nov 2012 07:04:59>
正如您所看到的,每毫秒有多行。我想要什么
do能够作为输入给出开始和结束时间戳,例如
begin=11:00:
和end=11:45:
并将其转储到该范围内的所有行。
我一直绞尽脑汁试图弄清楚这一点,但到目前为止还没有 得出满意的结果。
更新:当然,我发布问题后,我尝试的第一件事似乎就是 工作。这就是我所拥有的:
sed -n '/^06:25/,/^08:25:/p' logFile > newLogFile
如果有更好的方法,我们非常乐意接受建议。
答案 0 :(得分:0)
您可以使用以下oneliner:
awk -v start='00:04:59.000' -v end='00:04:59.900' \
'{if(start <= $1 && end >= $1) print $0}' < your.log > reduced.log
请注意start
和end
范围的完整格式 - 这是为了保持简单并且没有太大问题IMO
答案 1 :(得分:0)
我认为你的sed oneliner可以胜任这项任务。
除了之外,您可以针对速度进行优化(考虑到文件有数百万行),在打印所需的块时退出sed脚本(假设文件中没有重复的时间块) )。
sed -n '/^06:25/,/^08:25/{p;/^08:25/q}' logFile > newLogFile
这告诉sed在找到块的最后一行时退出。