我有一个Apache access.log文件,大小在35GB左右。通过它浏览不再是一个选择,没有等待很多。
我想把它分割成许多小文件,通过使用日期作为分割标准。
日期格式为“[15 / Oct / 2011:12:02:02 0000]”。任何想法我该怎么做只使用bash脚本,标准文本处理程序(grep,awk,sed和喜欢),管道和重定向?
输入文件名是access.log。我希望输出文件有格式,如access.apache.15_Oct_2011.log(这将是诀窍,虽然不太好,当排序..)
使用awk的一种方式:
awk 'BEGIN { split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ",months," ") for (a = 1; a <= 12; a++) m[months[a]] = a } { split($4,array,"[:/]"); year = array[3] month = sprintf("%02d",m[array[2]]) print > FILENAME"-"year"_"month".txt" }' incendiary.ws-2009
incendiary.ws-2010-2010_04.txt incendiary.ws-2010-2010_05.txt incendiary.ws-2010-2010_06.txt incendiary.ws-2010-2010_07.txt
对于150 MB的日志文件,Chepner的答案在3.4 GHz 8 Core Xeon E31270上花费了70秒,而这种方法花了5秒钟。
原文地址:https://www.jb51.cc/bash/387475.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。