Linux jq工具

jq命令允许直接在命令行下对JSON进行操作,包括分片、过滤、转换等
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集
JSON 数据的书写格式是: 名称/对象。
JSON的结构基于两点

jq命令的格式
jq [options] filter [files]
options:
–version:输出jq的版本信息并退出
–slurp/-s:读入整个输入流到一个数组。
–raw-input/-R:不作为JSON解析,将每一行的文本作为字符串输出到屏幕。
–null-input/ -n:不读取任何输入,过滤器运行使用null作为输入。一般用作从头构建JSON数据。
–compact-output /-c:使输出紧凑,而不是把每一个JSON对象输出在一行。
–colour-output / -C:打开颜色显示
–monochrome-output / -M:关闭颜色显示
–ascii-output /-a:指定输出格式为ASCII
-raw-output /-r :如果过滤的结果是一个字符串,那么直接写到标准输出(去掉字符串的引号)
filter:
. : 默认输出
.foo: 输出指定属性,foo代表属性。
.[foo] :输出指定数组元素。foo代表数组下标。
.[]:输出指定数组中全部元素
, :指定多个属性作为过滤条件时,用逗号分隔
| : 将指定的数组元素中的某个属性作为过滤条件
files:
JOSN格式文件。
示例1:

[root@vm_vgh-bj_zywccyr_0-164 test]# cat hostid
{"jsonrpc":"2.0","result":[{"hostid":"11241","proxy_hostid":"0","host":"VM_wuche_ZYWCCYR_10-12-2-70","status":"0","disable_until":"0","error":"","available":"1","errors_from":"0","lastaccess":"0","ipmi_authtype":"-1","ipmi_privilege":"2","ipmi_username":"","ipmi_password":"","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":"0","maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":"","jmx_disable_until":"0","jmx_available":"0","jmx_errors_from":"0","jmx_error":"","name":"VM_wuche_ZYWCCYR_10-12-2-70","flags":"0","templateid":"0","description":"","tls_connect":"1","tls_accept":"1","tls_issuer":"","tls_subject":"","tls_psk_identity":"","tls_psk":""},{"adc":"abc"}],"id":0}
[root@vm_vgh-bj_zywccyr_0-164 test]# cat hostid | jq -r .result[0]
{
  "hostid": "11241",
  "proxy_hostid": "0",
  "host": "VM_wuche_ZYWCCYR_10-12-2-70",
  "status": "0",
  "disable_until": "0",
  "error": "",
  "available": "1",
  "errors_from": "0",
  "lastaccess": "0",
  "ipmi_authtype": "-1",
  "ipmi_privilege": "2",
  "ipmi_username": "",
  "ipmi_password": "",
  "ipmi_disable_until": "0",
  "ipmi_available": "0",
  "snmp_disable_until": "0",
  "snmp_available": "0",
  "maintenanceid": "0",
  "maintenance_status": "0",
  "maintenance_type": "0",
  "maintenance_from": "0",
  "ipmi_errors_from": "0",
  "snmp_errors_from": "0",
  "ipmi_error": "",
  "snmp_error": "",
  "jmx_disable_until": "0",
  "jmx_available": "0",
  "jmx_errors_from": "0",
  "jmx_error": "",
  "name": "VM_wuche_ZYWCCYR_10-12-2-70",
  "flags": "0",
  "templateid": "0",
  "description": "",
  "tls_connect": "1",
  "tls_accept": "1",
  "tls_issuer": "",
  "tls_subject": "",
  "tls_psk_identity": "",
  "tls_psk": ""
}
[root@vm_vgh-bj_zywccyr_0-164 test]# cat hostid | jq -r .result[0].hostid
11241

示例2:

[{"hostCompany":"Beijing Autelan Technology","hostModel":"CS-VIC-2000-C","hostsn":"01010730b12014A00477","mac":"00:1F:64:CE:F3:8E","cpuModel":"MIPS 74Kc V4.12","cpuSN":"000000","memoryModel":"abcdefg","memorySN":"000000","boardSN":"01010730b12014A00477","networkCardMac":"00:1F:64:CE:F3:8F","lowFreModel":"AR9344","lowFreSN":"000000","hignFreModel":"AR9582","hignFreSN":"000000","gpsModel":"abcdefg","gpsSN":"000000","MEID_3g":"A000004E123ABD2","Company_3g":"ZTEMT INCORPORATED","modelOf3g":"MC271X","snOf3g":"A000004E123ABD2","iccid":"89860314400200885980","Operators":"CTCC","hardVersion":"1.20","firmwareVersion":"1.0.6.29"}]
$ jq . apinfo.json   
[
  {
    "firmwareVersion": "1.0.6.29",
    "hardVersion": "1.20",
    "Operators": "CTCC",
    "iccid": "DATA DATA",
    "snOf3g": "A000004E123ABD2",
    "modelOf3g": "MC271X",
    "Company_3g": "ZTEMT INCORPORATED",
    "MEID_3g": "A000004E123ABD2",
    "memorySN": "000000",
    "memoryModel": "abcdefg",
    "cpuSN": "000000",
    "cpuModel": "MIPS 74Kc V4.12",
    "mac": "00:1F:64:CE:F3:8E",
    "hostsn": "01010730b12014A00477",
    "hostModel": "CS-VIC-1999-C",
    "stCompany": "Beijing Autelan Technology",
    "boardSN": "01010730b12014A00477",
    "networkCardMac": "00:1F:64:CE:F3:8F",
    "lowFreModel": "AR9344",
    "lowFreSN": "000000",
    "hignFreModel": "AR9582",
    "hignFreSN": "000000",
    "gpsModel": "abcdefg",
    "gpsSN": "000000"
  }
]
jq .[] apinfo.json
{
  "firmwareVersion": "1.0.6.29",
  "hardVersion": "1.20",
  "Operators": "CTCC",
  "iccid": "DATA DATA",
  "snOf3g": "A000004E123ABD2",
  "modelOf3g": "MC271X",
  "Company_3g": "ZTEMT INCORPORATED",
  "MEID_3g": "A000004E123ABD2",
  "memorySN": "000000",
  "memoryModel": "abcdefg",
  "cpuSN": "000000",
  "cpuModel": "MIPS 74Kc V4.12",
  "mac": "00:1F:64:CE:F3:8E",
  "hostsn": "01010730b12014A00477",
  "hostModel": "CS-VIC-1999-C",
  "stCompany": "Beijing Autelan Technology",
  "boardSN": "01010730b12014A00477",
  "networkCardMac": "00:1F:64:CE:F3:8F",
  "lowFreModel": "AR9344",
  "lowFreSN": "000000",
  "hignFreModel": "AR9582",
  "hignFreSN": "000000",
  "gpsModel": "abcdefg",
  "gpsSN": "000000"
}
$ jq -r .[].mac apinfo.json
00:1F:64:CE:F3:8E


$ jq -r '.[] | .mac' apinfo.json
00:1F:64:CE:F3:8E


$ jq -r '.[] |.mac, .gpsSN' apinfo.json
00:1F:64:CE:F3:8E
000000


jq -r '.[].mac, .[].gpsSN' apinfo.json
00:1F:64:CE:F3:8E
000000

示例3:
黑屏调用loki api查询日志,只需要日志信息,不需要其他数据

[root@k8s-master ~]#  curl -G -s   "http://10.96.192.13:3100/loki/api/v1/query_range?limit=5000&start=1684908000000000000&end=1684922400000000000&step=120" --data-urlencode 'query={namespace="eps-prod",pod="prod-bos-group-1-v11-f448dcc98-4852s"}'| jq -r .data.result[0].values
[
  [
    "1684996680999039395",
    "{\"log\":\"10.244.235.192 - - [25/May/2023:14:38:00 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:38:00.975689945Z\"}"
  ],
  [
    "1684996680247118267",
    "{\"log\":\"10.244.235.192 - - [25/May/2023:14:38:00 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:38:00.177041759Z\"}"
  ],
  [
    "1684996679996582238",
    "{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:59 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:59.973895032Z\"}"
  ],
  [
    "1684996679996575659",
    "{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:59 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:59.790327561Z\"}"
  ],
  [
    "1684996679745831827",
    "{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:59 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:59.611419648Z\"}"
  ],
  [
    "1684996679495370140",
    "{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:59 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:59.401911438Z\"}"
  ],
  [
    "1684996678744244888",
    "{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:58 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:58.637100763Z\"}"
  ],
  [
    "1684996678493815519",
    "{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:58 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:58.4453956Z\"}"
  ],
  [
    "1684996678243206770",
    "{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:58 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:58.202226575Z\"}"
  ],
  [
    "1684996677992997930",
    "{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:57 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:57.894751311Z\"}"
  ],
  [
    "1684996677241572206",
    "{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:57 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:57.109562432Z\"}"
  ]
]

接口:GET /loki/api/v1/query_range
数据限制:limit=5000 // 这是最大值
start:开始时间 // 时间戳单位是纳秒
end:结束时间
–data-urlencode:请求体编码
query:查询语句
jq:json数据处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值