各行がISO8601タイムスタンプ(Nginx)とエポックタイムスタンプ(Nginx)で始まり、$time_iso8601
最も近いミリ秒まで表示されるカスタムNginxアクセスログがあります。$msec
このように:
2023-01-16T20:19:57+00:00 1673900397.009 ips="…" rm="…" […]
2023-01-16T20:19:57+00:00 1673900397.140 ips="…" rm="…" […]
2023-01-16T20:19:57+00:00 1673900397.163 ips="…" rm="…" […]
2023-01-16T20:19:57+00:00 1673900397.205 ips="…" rm="…" […]
2023-01-16T20:19:57+00:00 1673900397.210 ips="…" rm="…" […]
ファイルの各行を最初から始めて、ターゲットターゲットがISO8601タイムスタンプ形式で年、月、日付に基づいて構築された(新しいまたは既存の)ファイルに行を移動したいと思います/yyyy/mm/dd/access.log
。たとえば、上記のコードスニペットでは、各行をsourceからaccess.log
targetに移動したいとします/2023/01/16/access.log
。
ターゲットディレクトリが存在しない場合は、新規作成する必要があります。ターゲットファイルがない場合は作成する必要があります。
yyyy
、mm
および値を抽出するにはどのツールを使用しますかdd
?
ベストアンサー1
より良い使い方logrotate
やnginx
構成αГsнιnがコメントからリブログしました
awk
ただ楽しんでこれを実装したい場合:
awk -F'[-T]' '{
dir=$1"/"$2"/"$3
rc=system("mkdir -p " dir)
if (rc != 0) exit
print $0 >> dir"/access.log"
close(dir"/access.log")
}' access.log
# rm -f access.log
フィールド区切り文字はFS
F
ダッシュクラスと文字クラスに設定されます。S
-F
-
T
出力ディレクトリ/ファイル
$ find
./2023
./2023/01
./2023/01/16
./2023/01/16/access.log