grep命令用于查找小于数字的上一个单词

ami*_*mah 2 regex linux shell awk grep

我需要一个grep命令的帮助:

grep match-word tomcat-0.log.* | grep "TOMCAT BENCH" | grep -v Normal
Run Code Online (Sandbox Code Playgroud)

目前的输出类似于:

tomcat-0.log:TOMCAT BENCH: match_word random-text 1420 elapsed Thu 2016-09-22 06:31:04:928 PDT <SessionID: id> <RequestID: reqId> 
Run Code Online (Sandbox Code Playgroud)

我想修改它以仅显示经过值大于数字的那些行 3000

这个词elapsed总是存在,而数字就是之前 的单词elapsed.

你能否修改grep命令来过滤前一个单词并将其与一个数字进行比较?

anu*_*ava 5

使用gnu awk可以在一个命令中完成:

awk '/TOMCAT BENCH/ && !/Normal/ && match($0, / ([0-9]+) elapsed /, a) && a[1] > 3000' tomcat-0.log.*
Run Code Online (Sandbox Code Playgroud)

  • POSIXly我有'awk'/ TOMCAT BENCH/&&!/ Normal/{s = $ 0; $ 0 = substr($ 0,1,索引($ 0,"已过去"))} $(NF-1)> 3000 {print s}'`但它的想法相同,所以我删除了我的答案. (2认同)