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
삽입할 문자열을 계산하기 위해 날짜를 가져옵니다.
표준 면책 조항, 일 월 이름 연도 시 분 초는 결과를 간단하게 정렬하려는 경우 좋지 않은 선택입니다. 연 월 일 시 분 초를 고려하십시오.