shell - 如果模式之间的值大于数字,则正则表达式打印行 - 与列位置无关的解决方案
问题描述
2001-06-30T11:33:33,543 DEBUG (Bss-Thread-948:[]) SUNCA#44#77#CALMED#OK#58#NARDE#4356#68654768961#BHR#TST#DEV
2001-06-30T11:33:33,543 DEBUG (Bss-Thread-948:[]) SUNCA#44#77#CALMED#OK#58#NARDE#89034#1234567#BHR#TST#DEV
2001-06-30T11:33:33,543 DEBUG (Bss-Thread-948:[]) SUNCA#44#77#OK#58#BHREDD#234586#4254567#BHR#TST#DEV
2001-06-30T11:33:33,543 DEBUG (Bss-Thread-948:[]) SUNCA#44#77#OK#58#NARDE#89034#1034567#BHR#TST#DEV
我有上面提到的日志文件。仅当模式 # 和 #BHR 之间的值大于 1100000 时,我才想打印行。
我可以在我的日志文件中看到值为 68654768961、1234567、4254567、1034567 的行。根据要求,输出应仅包含前 3 行。
我正在寻找正则表达式来获得所需的输出。
解决方案
一个问题,这#58#BHR
应该在第三行忽略吗?如果是,我将在模式#
和#BHR#
.
通常,应该通过根据业务逻辑编写脚本来解决这个问题。但是您可以通过awk
.
awk '{if (0 == system("[ $(echo \"" $0 "\"" " | grep -oP \"" "(?<=#)\\d+(?=#BHR#)\" || echo 0) -gt 1100000 ]")) {print $0}}' log_file
主要是通过以下system()
方式来划伤值grep
:
# if can't get the pattern value by grep, the value will assign 0
echo $one_line | grep -oP "(?<=#)\d+(?=#BHR#)" || echo 0`
并将值与1100000
in[ "$value" -gt 1100000 ]
进行比较awk
。
仅供参考,所以如果value
大于1100000
它将返回0
。
system(cmd):执行 cmd 并返回其退出状态
推荐阅读
- mongodb - MongoDB使用另一个字段的值添加新字段
- twilio - Twilio Studio - 发送并等待回复 - 多个
- python - 如何编辑 x 轴长度同时保持绘图日期?
- python - matplotlib:每个子图中的多个图例
- ios - 如何在 Swift 中将 JSON 解析为 Realm 数据库时防止 Realm 覆盖自身?
- c++ - 使用指向函数的指针时不编译
- go - dog 没有实现宠物(speak 方法的类型错误)
- performance - 一个计算如何从经过的时间计算 FLOPS?
- reactjs - 如何在 ReactJS 中路由到新页面
- r - ggplot的中位数统计差异