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
삽입할 문자열을 계산하기 위한 날짜를 가져옵니다.
단순히 결과를 정렬하려는 경우 표준 면책조항인 "일, 월, 이름, 연도, 시, 분, 초"는 잘못된 선택입니다. 연도, 월, 일, 시, 분, 초를 고려하십시오.