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

挿入する文字列を計算するための日付を取得します。

単に結果をソートしたい場合、標準の免責事項「日、月、名前、年、時、分、秒」は間違った選択です。年、月、日、時、分、秒を考慮してください。

おすすめ記事