kubernetes - Grep 前一场比赛
问题描述
最好用一个例子来解释我想要实现的目标。
我有这个 kubectl 输出:
app-bf7c5cdfb-x8thq 3/3 Running 0 2h
app-bf7c5cdfb-xc9nf 3/3 Running 0 2h
app-bf7c5cdfb-xwlzh 2/3 Running 0 1h
app-bf7c5cdfb-xxt46 3/3 Running 0 2h
app-bf7c5cdfb-z9s2t 2/3 Running 0 7m
app-bf7c5cdfb-zmpzs 3/3 Running 0 2h
app-bf7c5cdfb-ztfx5 3/3 Running 0 2h
我想对每一行进行 grep,其中准备好的 pod 不等于总 pod,导致:
app-bf7c5cdfb-xwlzh 2/3 Running 0 1h
app-bf7c5cdfb-z9s2t 2/3 Running 0 7m
有没有一种简单的方法可以做到这一点?我的方法是编写这样的函数:
function kubeNotReady {
unset tmp
while :
do
read line
[[ $line == "" ]] && tmp="${tmp:0:$((${#tmp}-1))}" && break
total=`echo "$line" | sed -E "s|.*[[:digit:]]*/([[:digit:]]*).*|\1|"`
match=`echo "$line" | grep -v "$total/$total"`
if [ "${#match}" -gt "0" ]; then
tmp="$tmp$match"$'\n'
fi
done
echo "$tmp"
}
kubectl get po | kubeNotReady
解决方案
如果AWK
是您的选择,请尝试以下方法:
awk '{split($2, a, "/"); if (a[1] != a[2]) print}' out.txt
作为替代方案,您可以用bash
as 表示:
while IFS= read -r line; do
[[ $line =~ [[:blank:]]([[:digit:]]+)/([[:digit:]]+)[[:blank:]] ]] && (( ${BASH_REMATCH[1]} != ${BASH_REMATCH[2]} )) && echo "$line"
done < out.txt
希望这可以帮助。
推荐阅读
- mysql - 使用 Intellij 通过 kubernetes pod 连接到 MySQL 服务器
- django - 获取子查询的计数
- django - 需要使我的创建帖子 FBV 不包括当前登录的用户
- c# - 循环通过成员数据的 xunit 测试方法参数
- android - 长时间运行应用程序时使用哪个服务(Android)?
- swift - swift tablecell NSTextAttachment + GIF -> gif 图像不动画
- php - 带有 php 和 mysql 数据库的 Angular 8 跨域请求被阻止:
- arrays - 如何在 Swift 中创建全局数组并在两个 TableView 中保存值
- java - 无法使用 Mockito 模拟 MongoTemplate executeQuery
- java - 尝试连接到 gmail IMAP 服务器时出现 javax.mail.MessagingException