我试图过滤掉一个文件的内容,但有些原因它不工作。我的目标是过滤掉任何以“build-”开头的内容,它的年龄是1天以上。有时它显示分钟/小时/天,因此我需要过滤1d,24 h,1440 m和以上。(X〉= 1d|| X〉= 24小时||X〉= 1440米)。
这是我的文本文件:
NAME STATUS AGE
argocd Active 10d
build-start-a Active 1d
build-start-b Active 22h
build-start-s Active 145m
default Active 12d
games Active 9d
kube-node-lease Active 12d
kube-public Active 12d
kube-system Active 12d
start-build-s Active 96m
这是我的命令:
cat test.txt | grep "^build-*" | awk '{ if ($3 >= 1d || $3 >= 24h || $3 >= 1440m) print $1 }'
结果为:
建立-启动-a
构建启动b
建置开始
(而不仅仅是“build-start-a”,因为它是唯一一个符合我希望的条件的。)
我的猜测是bash比较“22 h”+“145 m”和“1d”,并假设“22 h”+“145 m”大于“1d”,这就是为什么我看到三行。我尝试了多种不同的if条件,但它不适合我。尝试“硬编码”值,并将“1d”“24 h”,它也不工作。尝试使用else if实现它,但结果是相同的。
我很感激你能理解我做错了什么,并得到你的帮助!
谢谢你:)
2条答案
按热度按时间8yparm6h1#
您可以使用此
awk
解决方案:如您所见,我们根据
$3
中的最后一个字符应用了不同的条件。$3+0
将第3列转换为数值。ulydmbyx2#
只需将每个时间转换为分钟,然后按分钟计算: