模式的 grep "variable=value"并仅返回具有值>阈值的匹配条目



我正在使用下面的命令搜索kubernetes pod日志中的模式" variable=value "(例如,variable=10或variable=500):

Kubectl logs -f | grep “variable=”

我的问题是,是否有可能修改上面的命令,以便返回变量值大于某个阈值的日志,例如,对于threshold=300,variable=301,variable=302将被过滤进来,但variable=299将被过滤掉

我知道我可以为此开发一个小程序,但我更希望直接在命令行中快速解决这个问题,而不需要编写小程序的麻烦。

你没有提供任何样本输入,所以这是一个猜测,但这可能是你想要做的:

awk -F'=' '($1=="variable") && ($2>300)' file

如果这不是你需要的全部,那么请编辑你的问题,包括一个最小的,可重复的例子,简洁的,可测试的样本输入,预期的输出和你自己解决问题的尝试,这样我们可以进一步帮助你。参见[ask]并查看已被点赞和回答的现有问题。

作为测试,我创建了这个文件:

Prompt> cat test.txt
var=2
var=22
var=222
blabla

首先,我过滤变量赋值行:

Prompt> grep "var=" test.txt
var=2
var=22
var=222

然后,我以两种方式对值的条件进行过滤:

Prompt> grep "var=" test.txt | awk -F '=' '{if ($2 > 25) print $1 "=" $2}'
var=222
Prompt> grep "var=" test.txt | awk -F '=' '{if ($2 < 25) print $1 "=" $2}'
var=2
var=22

我会使用perl,这里我从一个名为bash-pod的pod中打印日志。通过过滤,只显示带有threshold=<integer-greater-than-80>的行。

kubectl logs -f bash-pod  |perl -ne '/.*threshold=(d+).*/m;print if $1> 80'

用下面的pod测试上面的代码:

apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: bash-pod
name: bash-pod
spec:
containers:
- image: bash
name: bash-pod
resources: {}
command: ['bash','-c','while true;do echo "threshold=$(( ( RANDOM % 100 )  + 1 ))";sleep 1;done']
dnsPolicy: ClusterFirst
restartPolicy: Never
status: {}

:

kubectl logs -f bash-pod  |perl -ne '/.*threshold=(d+).*/m;print if $1> 80'
threshold=82
threshold=90
threshold=89
threshold=90
threshold=85
threshold=83
threshold=86
threshold=83
...
.....

注意:如果你想考虑浮点数,那么你可以使用.*threshold=(d+(?:.d+)?).*作为新的正则表达式。

这是一个灵活的解决方案,允许您指定您喜欢的参数,并且功能相同:

< test_filter_threshold.txt | 
mawk 'NF*=(____=="<")!=((___~"."?+___:___
)<=+$(NF*=(!_<NF)*(__==$!_)))'  FS== OFS== 
__="var" ___="1" ____=">="
var=2
var=22
var=222
___=4    ____='<'
var=2
___=200  ____='<'
var=2
var=22
___=200  ____='>='
var=222
___=200  ____=           # "<" is strictly less than, 
# all else def. to ">="
var=222
___='3.14159' ____='>='  # float point thresholds (TRHD) are valid 
var=22
var=222
___=   ____=             # missing TRHD def. to all
var=2
var=22
var=222
___='abc' ____='>='     # invalid TRHD def. to non-zero positive 
var=2
var=222
1 var=2
2 var=-22
3 var=222
4 blabla

相关内容

  • 没有找到相关文章

最新更新