awk insere a hora do servidor no início/fim da linha

awk insere a hora do servidor no início/fim da linha

Preciso de ajuda sobre printf.

Atualmente eu tenho esse script

awk '{c[$1"\t"$7]++}END{for(x in c)if (c[x]>10){printf "from %s (%d)\n",x,c[x]}}' /checkip.log >> bb.log

Isso me dá

from 120.230.xx.xxx /index (16)

from 120.231.xx.xxx /index (16)

from 120.236.xx.xxx /index (16)

e assim por diante.

Gostaria que o horário atual do meu servidor Linux (não a data de checkip.log) fosse impresso no início/fim de cada linha.

Por exemplo

[07/Mar/2020:20:00:04 +0000] from 120.230.xx.xxx /index (16)

[07/Mar/2020:20:00:04 +0000] from 120.231.xx.xxx /index (16)

[07/Mar/2020:20:00:04 +0000] from 120.236.xx.xxx /index (16)

Responder1

Se você tem GNU awk, então

awk 'BEGIN{ d=strftime("[%d/%b/%Y:%H:%M:%S %z]") }
    {c[$1"\t"$7]++}
    END{for(x in c)if (c[x]>10){printf "%s from %s (%d)\n",d,x,c[x]}}' /checkip.log >> bb.log

Se você não possui o GNU awk, use

awk -vd="$(date '+[%d/%b/%Y:%H:%M:%S %z]')" '{c[$1"\t"$7]++}
    END{for(x in c)if (c[x]>10){printf "%s from %s (%d)\n",d,x,c[x]}}' /checkip.log >> bb.log

para obter a data para calcular a string a ser inserida.

Isenção de responsabilidade padrão, dia mês nome ano hora minuto segundo é uma má escolha se você quiser classificar os resultados de forma simples. Considere ano mês dia hora minuto segundo.

informação relacionada