2017-09-26 54 views
1

我想打印"/"分隔符里面的输出标题。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 | 

回答

0

您正在进行大量不必要的调用来处理数据。你的命令可以大大简化。

  • 你并不需要显式钥匙插入.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 
+0

so so so谢谢我的人,但我想问问另一个问题事情 –

1

既然你已经使用string interpolation作为该特定字段意味着包括你需要(削减/)的字符串中的字符,像这样:

curl ... | jq -c '... [.version,.driver,.miner,"\(.gpus)/\(.miner_instance)"] ...' 

在你的情况(完整的线):

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 
+0

真的感谢的人,我非常欣赏这一点真的很感谢 –

+0

不,我完全接受它如此有用的我是新来的,所以也许我做了一些错了,所以我没有投票反对它,所以谢谢我的朋友 –

+0

我看到你是新的StackOverflow,所以让我祝你欢迎! :)看到这里[如何接受答案的作品](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。(你应该检查绿色的选中标记,表示回答的问题。) – randomir

0

这里是为了简化一些建议:

  • 使用--raw-output选项来jq删除多余的反斜杠
  • 有无需删除引号,csvlook会为你
  • 没有必要AWK添加标题行,使用一个子shell
  • 没有必要隐式指定钻机,使用.[]

这里一个例子:

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

输出:

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

谢谢你,我的朋友iv已经尝试它很好用 –