로그 파일이 중간에 갑자기 끝나는 이전에 손상된 스크립트가 있습니다. 이는 각 사례를 볼 때 타임스탬프에서 분명하게 드러납니다. 이러한 모든 경우를 자동으로 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초가 지나면 오탐지가 포함되지만 그것만으로도 충분합니다.
비결은 이전 행과 시간 열을 변수에 저장한 다음 이를 비교할 때 사용하는 것입니다.