2017-09-26 78 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已經嘗試它很好用 –