我继承了Laravel系统,其中包含一个大型的单个日志文件,当前的大小约为17GB,现在我每月轮换将来的日志文件,但是我需要按月拆分现有日志。
日期格式为yyyy-mm-dd hh:mm:ss(“ [2018-06-28 13:32:05]”)。有人知道我如何仅使用bash脚本(例如通过使用awk,sed等)执行拆分。
输入文件名为laravel.log。我希望输出文件具有laravel-2018-06.log这样的格式。
不胜感激。
答案 0 :(得分:0)
由于您提供的信息很少,我将遵循以下假设:
[yyyy-mm-dd hh:mm:ss]
形式的字符串,如果还有更多,我们取第一个。与您的日期匹配的正则表达式为
\\[[0-9]{4}(-[0-9]{2}){2} ([0-9]{2}:){2}[0-9]{2}\\]
或更不严格
\\[[-:0-9 ]{19}\\]
因此,我们可以将其与match(s,ere)
结合使用以获得所需的字符串:
awk 'BEGIN{ere="\\[[0-9]{4}(-[0-9]{2}){2} ([0-9]{2}:){2}[0-9]{2}\\]"}
{ match($0,ere); fname="laravel-"substr($0,RSTART+1,7)".log" }
(fname != oname) { close(oname); oname=fname }
{ print > oname }' laravel.log
正如您所说的那样,您的文件有点偏大,您可能想先在一个涵盖数月的子集中进行测试。
$ head -10000 laravel.log > laravel.head.log
$ awk '{...}' laravel.head.log
$ md5sum laravel.head.log
$ cat laravel.*-*.log | md5sum
如果md5sum
不匹配,则可能有问题。