linux jq命令
【摘要】 jq是一个轻量级,功能强大的json解析工具,专门用于查询,格式化,修改json数据。 jq命令安装 Centos/RHELyum install -y epel-releaseyum install -y jq Ubuntu/Debianapt updateapt install -y jq Macosbrew install jq 直接二进制安装curl -Lo /usr/local/b...
jq是一个轻量级,功能强大的json解析工具,专门用于查询,格式化,修改json数据。
jq命令安装
Centos/RHEL
yum install -y epel-release
yum install -y jq
Ubuntu/Debian
apt update
apt install -y jq
Macos
brew install jq
直接二进制安装
curl -Lo /usr/local/bin/jq https://github.com/stedolan/jq/releases/latest/download/jq-linux64
chmod +x /usr/local/bin/jq
jq基础用法
jq的基础用法是
jq '<过滤表达式>' <JSON 文件或命令输出>
格式化json
如果json 数据没有格式化,可以使用jq使其美观:
echo '{"name":"Alice","age":25,"city":"Shanghai"}' | jq .
输出:
{
"name": "Alice",
"age": 25,
"city": "Shanghai"
}
解析json字段
获取json中的某个字段
echo '{"name":"Alice","age":25}' | jq '.name'
输出
"Alice"
解析嵌套json
如果json结构复杂,可以用.访问嵌套字段
echo '{"person": {"name": "Alice", "age": 25}}' | jq '.person.name'
输出
"Alice"
解析数组
假设json数据如下
{ "users": [ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30} ] }
提取所有name
echo `{ "users": [ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30} ] }` | jq .'users[].name'
"Alice" "Bob"
jq 进阶用法
过滤json数据
如下json数据
[ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}, {"name": "Charlie", "age": 35} ]
可以筛选大于30的
echo '[ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}, {"name": "Charlie", "age": 35} ]' | jq '.[] | select(.age>30)'
{
"name": "Charlie",
"age": 35
}
修改json数据
如下
echo '{"name":"Alice","age":25}' | jq '. | {"Username":.name,"age":.age}'
{
"Username": "Alice",
"age": 25
}
统计json数组长度
echo '[{"name":"Alice"},{"name":"Bob"}]' | jq 'length'
2
jq在k8s 运维中的应用
在k8s环境中,kubectl 生成的json数据通常很庞大,使用jq可以快速筛选信息
获取节点的pod限制
kubectl get node -o json | jq -r '.items[] | "node:\(.metadata.name) pod_limit:\(.status.capacity.pods)"'
host:k8s-master01 pod_limit:110
host:k8s-master02 pod_limit:110
host:k8s-master03 pod_limit:110
host:k8s-node01 pod_limit:110
host:k8s-node02 pod_limit:110
获取所有pod的名称
kubectl get pods -A -o json | jq '.items[].metadata.name'
获取指定Namespace的pod
kubectl get pods -n default -o json | jq '.items[].metadata.name'
如果要筛选 正在运行的 Pod:
kubectl get pods -n default -o json | jq '.items[] | select(.status.phase=="Running") | .metadata.name'
统计Running状态的Pod数量
kubectl get pods -A -o json | jq '[.items[] | select(.status.phase=="Running")] | length'
结合sed/awk 进行文本处理
提取格式化json,并输出到文件
kubectl get pods -A -o json | jq '.items[].metadata.name' > pod_list.txt
jq+awk提取k8s资源
获取所有pod名称,并用awk处理
kubect get pods -A -o json | jq -r '.items[].metadata.name' | awk '{print "Pod:"$1}'
总结
操作 命令
安装 jq(CentOS) yum install -y jq
安装 jq(Ubuntu) apt install -y jq
安装 jq(MacOS) brew install jq
格式化 JSON jq .
获取 JSON 字段 jq ‘.name’
筛选 JSON 数据 jq '.[] 统计 JSON 长度 jq 'length' 获取 Kubernetes 节点 Pod 限制 kubectl get nodes -o json
获取所有 Pod 名称 `kubectl get pods -A -o json
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)