Izy*_*zy- 1 shell-script regular-expression json
我有一个类似于这样的文件:
{
"1": {
"state": "RUNNING",
"stats": {
"name": "some-file",
"uris": [
"some-example.com"
],
"host": "127.0.0.1",
"port": 8080,
"uptime": 168,
"mem_quota": 2147483648,
"disk_quota": 2147483648,
"fds_quota": 16384,
"usage": {
"time": "2016-09-13 07:39:40 +0000",
"cpu": 0.30315522606369516,
"mem": 1069568000,
"disk": 237203456
}
}
},
"0": {
"state": "RUNNING",
"stats": {
"name": "some-file2",
"uris": [
"some-example-e.com"
],
"host": "127.0.0.2",
"port": 8081,
"uptime": 169,
"mem_quota": 2147483648,
"disk_quota": 2147483648,
"fds_quota": 16384,
"usage": {
"time": "2016-09-13 07:39:40 +0000",
"cpu": 0.3086296386531593,
"mem": 1073180672,
"disk": 237203456
}
}
},
"2": {
"state": "RUNNING",
"stats": {
"name": "some-file3",
"uris": [
"some-example.com"
],
"host": "127.1.20.3",
"port": 8190,
"uptime": 168,
"mem_quota": 2147483648,
"disk_quota": 2147483648,
"fds_quota": 16384,
"usage": {
"time": "2016-09-13 07:39:40 +0000",
"cpu": 0.31213565359044587,
"mem": 1072861184,
"disk": 237203456
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要提取 cpu、mem 和磁盘的值并将其放入一个文件中,格式如下:
0.30315522606369516,1069568000,237203456,0.3086296386531593,1073180672
Run Code Online (Sandbox Code Playgroud)
基本上应该是
first_instance_cpu,first_instance_mem,first_instance_disk,second_instance_cpu,second_instance_mem...
Run Code Online (Sandbox Code Playgroud)
我希望你明白这一点。
我正在使用以下grep语句来检索这些值。
grep -Eow '"(cpu|mem|disk)": [0-9.]+' SampleOutput | grep '[0-9.]'
Run Code Online (Sandbox Code Playgroud)
这给了我如下输出
"cpu": 0.30315522606369516
"mem": 1069568000
"disk": 237203456
"cpu": 0.3086296386531593
"mem": 1073180672
"disk": 237203456
"cpu": 0.31213565359044587
"mem": 1072861184
"disk": 237203456
Run Code Online (Sandbox Code Playgroud)
我想用红色突出显示的数字(匹配)。现在,我只想要数字,但是当我在-o第二个grep命令中使用该选项时,我得到了数字,当然,但每个数字都在不同的行上,就像这样
0
.
3
3
1
Run Code Online (Sandbox Code Playgroud)
...等等。
如何在不同行上获得至少为整数的结果?然后我可以使用 tr 或其他东西来用逗号分隔它们。
由于您的文件是 JSON 格式,我将使用jq:
jq '
flatten |
map(.stats.usage | del(.time)) |
map([.cpu, .mem, .disk]) |
flatten |
.[]' <file.json | \
paste -sd ,
Run Code Online (Sandbox Code Playgroud)
输出:
0.30315522606369516,1069568000,237203456,0.3086296386531593,1073180672,237203456,0.31213565359044587,1072861184,237203456
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
432 次 |
| 最近记录: |