我怎样才能从一个巨大的(120GB)httpd error_log根据时间范围只grep线,说:
from 2011-11-15 11:30 pm to 2011-11-16 01:30 am
谢谢!
你可能不得不做一些深入研究,我会开始获取date范围:
grep -e "2011\-11\-[15-16] " error_log > filtered grep -v -e "2011\-11\-15 [0-10]:" | grep -v -e "2011\-11\-15 11:[0-29]" > filtered grep -v -e "2011\-11\-16 [2-23]:" | grep -v -e "2011\-11\-16 01:[31-59]" > filtered cat filtered
我能想到但没有做的最有效的方法是find你的date范围的开始和结束字节,并得到它; (这显然可能与grep),但我不知道如何从文件中获得一个字节范围 – 可能需要一些awk技能
编辑:由于这是一个有趣的问题 – 我做了更多的挖掘:
你可以通过下面的方法获得第一个字节的偏移
# Get first byte offset, leftmost number is the offset... grep -m 1 -b "2011-11-15 11:3" error_log # Get last byte offset grep -m 1 -b "2011-11-16 01:3" error_log #(Subtract first number from last number to get byte length) Then do: dd if=error_log of=filtered bs=c skip=<first number> count=<last_byte#-first_byte#>
awk'$ 3>“11:30:00”&& $ 3 <“13:30:00”'log_file | 减
其中$ 3是日志文件的第三列,即时间戳,您可以根据您的日志文件使用任何数字。