ログファイルが途中で突然終了する以前に破損したスクリプトがあります。これは、各ケースを見るとタイムスタンプで明らかに明らかになります。これらすべてのケースを自動的にgrepする方法はありますか?
適切な "payone_cancel.php end" を使用した健康的なエンディングの例です。
2023-03-21T08:41:04+00:00 DEBUG paypal paypal_cancel.php begin
2023-03-21T08:41:04+00:00 DEBUG paypal params = {"id":123,"old_status":"","new_status":"DD"}
2023-03-21T08:41:04+00:00 DEBUG paypal JPATH_ROOT = [ROOT]
2023-03-21T08:41:04+00:00 DEBUG paypal PaypalCancel params = {"id":123,"old_status":"","new_status":"DD"}
2023-03-21T08:41:04+00:00 DEBUG paypal new_status is not EE or empty string, nothing to do
2023-03-21T08:41:04+00:00 DEBUG paypal paypal_cancel.php end
正しい "paypal_cancel end" 行の前に新しいタイムスタンプが表示されるエラー状態の例:
2023-02-17T20:57:41+00:00 DEBUG paypal paypal_cancel.php begin
2023-02-17T20:57:41+00:00 DEBUG paypal params = {"id":"123","old_status":"EE","new_status":"EE"}
2023-02-17T20:57:41+00:00 DEBUG paypal JPATH_ROOT = [ROOT]
2023-02-17T20:57:41+00:00 DEBUG paypal PaypalCancel params = {"id":"123","old_status":"EE","new_status":"EE"}
2023-02-17T22:00:27+00:00 DEBUG paypal --- frontend paypal gateway begin ---
grep -l
さまざまな場合に行数が異なるため、機能しない可能性があります。
awkをもう一度学ぶべきかもしれません。
答え1
grep -F 'old_status":"DD","new_status":"EE' -A1 | \
awk '{if (prev_line ~ /PaypalCancel/ && time != $1) print prev_line; time = $1; prev_line = $0}'
録音中に1秒経過すると誤検出が含まれますが、それだけで十分です。
秘密は、前の行と時刻の列を変数に保存してから比較するときに使用することです。