![「[numberLargerThan5000]ms」の発生をどのように把握しますか?](https://linux33.com/image/11724/%E3%80%8C%5BnumberLargerThan5000%5Dms%E3%80%8D%E3%81%AE%E7%99%BA%E7%94%9F%E3%82%92%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E6%8A%8A%E6%8F%A1%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F.png)
フォームの各エントリを含む.logファイルがあります。
2018-09-28T10:53:48,006 [Jetty-6152 ] INFO [correlationId] my.package.service:570 - Inbound request: 1.2.3.4 - GET - 12342ms - 200 - /json/some/resource
2018-09-28T11:53:48,006 [Jetty-6152 ] INFO [correlationId] my.package.service:570 - Inbound request: 1.2.3.4 - GET - 204ms - 200 - /json/other/resource
リクエストに5秒以上かかるすべてのアイテムを見つけるにはどうすればよいですか?アイテムに「[numberGreaterThan5000]ms」というテキストが含まれていますか?
答え1
私はこれが次のようになるべきだと思います。
grep -E '([5-9][0-9]{3}|[0-9]{5,})ms' | grep -v 5000ms
どのように動作しますか?
- 使用される
-E
正規表現は「現代的な」形式(拡張とも呼ばれます)です。私たちの場合、いくつかの文字を保存できるため、入力が簡単になります\
。 (...|...)ms
文字列の後に2つの選択肢を検索しますms
。正規表現は数値を比較できないため、これが必要です。だから私はそう言うことはできません>= 5000
。- 最初のオプションは、
[5-9][0-9]{3}
5から9の間の数字で始まり、その後に0から9の間の数字が3回表示される文字列を一致させることです。数字は> = 5000と< 10000です。 - 2番目のオプションは、5桁以上の文字列、つまり10000を超える数字と一致します。
- 最後に、結果をパイプしてすべての
grep -v 5000ms
発生をフィルタリングします。5000ms
大きい5000より大きい。より大きいか等しい場合は、値を無視してください。
どこでもっと学ぶことができますか?
読んでman 1 grep
。man 7 regex
答え2
通常、正規表現で数値比較を作成することは避けてください。実際の数値比較を実行するには、awk
orと同じものを使用してください。perl
gawk -v x=5000 'match($0,/([0-9]+)ms/,a) && a[1]+0 > x' file.log
または
perl -ne 'print if /(\d+)ms/ && $1 > 5000' file.log