json - jq 在输出中打印字符

标签 json linux bash jq

我想在输出标题中打印 "/" 分隔符。

curl  -s http://cd0a4a.ethosdistro.com/?json=yes \
    | jq -c '.rigs|."0d6b27",."50dc35"|[.version,.driver,.miner,"\(.gpus)\(.miner_instance)"]|@csv' \
    | sed 's/\\//g;s/\"//g' \
    | gawk 'BEGIN{print  "version" "," "GPU_driver" "," "miner" "," "gpu"} {print $0}' \
    | csvlook -I

输出是这样的:

| version | GPU_driver | miner    | gpu |
| ------- | ---------- | -------- | --- |
| 1.2.3   | nvidia     | ethminer | 22  |
| 1.2.4   | amdgpu     | ethminer | 11  |

但我希望 gpu 标题中的数字之间有分隔符,如下所示:

| version | GPU_driver | miner    | gpu  |
| ------- | ---------- | -------- | ---- |
| 1.2.3   | nvidia     | ethminer | 2/2  |
| 1.2.4   | amdgpu     | ethminer | 1/1  |

最佳答案

您只是为了处理数据而进行了很多不必要的调用。您的命令可以大大简化。

  • 您不需要显式键入 .rigs 对象来获取它们的值,您可以使用 [] 访问它们。
  • 您不需要调用 sed 来去除引号,只需使用原始输出 -r
  • 您不需要调用 awk 来添加标题,您可以从 jq 输出一个额外的行。

所以你的命令变成了这个:

$ curl -s http://cd0a4a.ethosdistro.com/?json=yes \
| jq -r '["version", "GPU_driver", "miner", "gpu"],
         (.rigs[] | [.version, .driver, .miner, "\(.gpus)/\(.miner_instance)"])
             | @csv' \
| csvlook -I

关于json - jq 在输出中打印字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46430810/

相关文章:

json - Go json.Unmarshal() 适用于单个实体但不适用于 slice

json - 为什么更新操作没有发布任何数据?

linux - Gall 和 Lempitsky 如何编译 opencv 霍夫森林实现

node.js - 冲泡安装 npm "npm: command not found"

java - 如何同时解析 JSONObject 和 JSONArray

linux -/bin/sh : 1: arm-linux-gnueabihf-strip: not found

linux - 如何在 Linux 上从连接到 I2C 的摄像头读取流数据?

ruby - 从 Ruby : capturing the output while displaying the output? 运行 shell 命令

linux - bash 命令创建自定义命名文件

android - 在 AsyncTask 类中哪里更好地解析 json 字符串?