단어를 찾아 오류를 비교하는 스크립트를 작성하려고 합니다. 시간이 01 또는 04와 같지 않으면 잘못된 시간을 인쇄해야 합니다.
grep -e "Socket disconnected" -e "App Server collections connection state[False]" log-2019-10* |
awk '{if ((substr($2,1,2) != "04")) print (substr($2,1,8));}'
15:00:03
19:02:44
19:02:44
21:27:48
21:27:48
20:20:13
01:49:25
01:49:54
하지만 내가 사용할 때
grep -e "Socket disconnected" -e "App Server collections connection state[False]" log-2019-10* |
awk '{if ((substr($2,1,2) != "01") || (substr($2,1,2) != "04")) print (substr($2,1,8))}'
모든 타이밍을 인쇄하고 있습니다.
04:56:55
04:56:55
04:55:25
04:55:25
04:56:26
04:55:27
04:55:28
04:55:24
04:55:24
15:00:03
19:02:44
19:02:44
21:27:48
21:27:48
04:55:22
04:55:22
04:55:25
04:55:25
04:55:24
04:55:24
04:55:25
04:55:25
04:55:24
04:55:24
04:55:24
04:55:24
04:55:24
04:55:24
04:55:25
04:55:25
04:55:28
04:55:28
04:55:24
04:55:24
20:20:13
04:55:24
04:55:24
04:55:24
04:55:24
04:55:26
04:55:26
04:55:25
04:55:25
04:55:25
04:55:25
04:55:23
04:55:23
04:55:23
04:55:23
01:49:25
01:49:54
04:55:23
04:55:24
04:55:24
04:55:26
04:55:26
04:55:23
04:55:23
04:55:24
04:55:24
04:55:24
04:55:24
04:55:24
04:55:24
04:55:24
04:55:24
04:55:24
04:55:24
04:55:25
04:55:25
누구든지 나를 도와줄 수 있나요?
답변1
를 사용하는 경우 if ((substr($2,1,2) != "01") || (substr($2,1,2) != "04"))
시간이 "01"이 아니거나 시간이 "04"가 아닌 경우 조건은 "01"("04" 아님) 및 "04"("01" 아님)를 포함하여 항상 true입니다. ).
다음을 사용해야 합니다 &&
.
grep -e "Socket disconnected" -e "App Server collections connection state[False]" log-2019-10* |
awk '{if ((substr($2,1,2) != "01") && (substr($2,1,2) != "04")) print (substr($2,1,8))}'
생산하다
15:00:03
19:02:44
19:02:44
21:27:48
21:27:48
20:20:13
이것은 예입니다드모건의 법칙: 시간이 "01" 또는 "04"가 아닌지 확인하고 싶은 경우,즉 !("01" || "04")
, 와 동일합니다 !"01" && !"04"
.
그런데 grep
AWK에서 수행되는 필터링을 다음과 결합할 수 있습니다.
awk '(/Socket disconnected/ || /App Server collections connection state\[False]/) && substr($2,1,2) != "01" && substr($2,1,2) != "04" { print substr($2,1,8) }' log-2019-10*