awk Serverzeit am Anfang/Ende der Zeile einfügen

awk Serverzeit am Anfang/Ende der Zeile einfügen

Ich brauche Hilfe zu printf.

Derzeit habe ich dieses Skript

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

Es gibt mir

from 120.230.xx.xxx /index (16)

from 120.231.xx.xxx /index (16)

from 120.236.xx.xxx /index (16)

und so weiter.

Ich möchte meine aktuelle Linux-Serverzeit (nicht das Datum von checkip.log) am Anfang/Ende jeder Zeile gedruckt haben.

Zum Beispiel

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

Antwort1

Wenn Sie GNU awk haben, dann

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

Wenn Sie GNU awk nicht haben, verwenden Sie

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

um das Datum abzurufen und die einzufügende Zeichenfolge zu berechnen.

Standard-Haftungsausschluss: Tag Monatsname Jahr Stunde Minute Sekunde ist eine schlechte Wahl, wenn Sie die Ergebnisse einfach sortieren möchten. Betrachten Sie Jahr Monat Tag Stunde Minute Sekunde.

verwandte Informationen