awk вставляет время сервера в начало/конец строки

awk вставляет время сервера в начало/конец строки

Мне нужна помощь с printf.

В настоящее время у меня есть этот скрипт

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

Это дает мне

from 120.230.xx.xxx /index (16)

from 120.231.xx.xxx /index (16)

from 120.236.xx.xxx /index (16)

и так далее.

checkip.logЯ хотел бы, чтобы в начале/конце каждой строки отображалось текущее время сервера Linux (а не дата ).

Например

[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)

решение1

Если у вас есть GNU awk, то

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

Если у вас нет GNU awk, то используйте

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

чтобы получить дату для расчета строки, которая будет вставлена.

Стандартный отказ от ответственности, день месяцназвание год час минута секунда — плохой выбор, если вы когда-нибудь захотите просто отсортировать результаты. Рассмотрим год месяц день час минута секунда.

Связанный контент