Мне нужна помощь с 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
чтобы получить дату для расчета строки, которая будет вставлена.
Стандартный отказ от ответственности, день месяцназвание год час минута секунда — плохой выбор, если вы когда-нибудь захотите просто отсортировать результаты. Рассмотрим год месяц день час минута секунда.