我正在使用下面的命令搜索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