我正在搜索编写脚本来 grep 一个单词并比较错误的时间。如果时间不等于 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));}'
Run Code Online (Sandbox Code Playgroud)
15:00:03
19:02:44
19:02:44
21:27:48
21:27:48
20:20:13
01:49:25
01:49:54
Run Code Online (Sandbox Code Playgroud)
但是当我使用
15:00:03
19:02:44
19:02:44
21:27:48
21:27:48
20:20:13
01:49:25
01:49:54
Run Code Online (Sandbox Code Playgroud)
它正在打印所有时间
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
Run Code Online (Sandbox Code Playgroud)
有人可以帮我吗?
当你使用时if ((substr($2,1,2) != "01") || (substr($2,1,2) != "04")),条件为真,要么时间不是“01”,要么时间不是“04”;这总是正确的,包括“01”(不是“04”)和“04”(不是“01”)。
你应该使用&&:
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))}'
Run Code Online (Sandbox Code Playgroud)
产生
15:00:03
19:02:44
19:02:44
21:27:48
21:27:48
20:20:13
Run Code Online (Sandbox Code Playgroud)
这是德摩根定律的一个实例:您要检查时间是否既不是“01”也不是“04”,即 !("01" || "04"),它等价于!"01" && !"04"。
顺便说一句,您可以结合grep在 AWK 中执行过滤:
15:00:03
19:02:44
19:02:44
21:27:48
21:27:48
20:20:13
Run Code Online (Sandbox Code Playgroud)