条件が機能しない場合、|| を使用すると awk です。

条件が機能しない場合、|| を使用すると awk です。

単語を見つけてエラーを比較するスクリプトを作成しようとしています。時間が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"

ただし、grepAWKで実行されるフィルタリングを次のように組み合わせることができます。

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*

おすすめ記事