Use T
como o delimitador de campo e verifique se há cadeias semelhantes a data explicitamente. Por exemplo, para dividir por ano:
awk -FT '($1~/^[0-9]+-[0-9]+-[0-9]+$/){d=substr($1,1,4)}{print > d".log"}' logfile
E por ano + mês:
awk -FT '($1~/^[0-9]+-[0-9]+-[0-9]+$/){split($1,d,"-")}{print > d[1]d[2]".log"}' logfile
Aqui, verificamos que o primeiro campo (definido por T
, portanto, toda a data nas linhas que começam com datas, é o que -FT
significa) é um conjunto de 3 números separados por -
. Se for, para obter o ano, extraímos os primeiros 4 caracteres ( d=substr($1,1,4)
) e, para obter o mês, dividimos o primeiro campo em -
, salvando as sequências resultantes na matriz d
( split($1,d,"-")
), e use os primeiros dois elementos da matriz ( d[1]d[2]
) para o nome do arquivo.