Поскольку предоставленная вами информация немного скудна, я сделаю следующие предположения:
- каждая запись в журнале представляет собой одну строку
- где-то всегда есть одна строка вида
[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
не совпадает, у вас может быть проблема.