2017-04-18 94 views
1

我有這樣的命令:bash腳本 - irsend列表輸出到JSON

irsend LIST lgtv "" 

,其輸出是這樣的:

irsend: 00000000000010ef KEY_POWER 
irsend: 0000000000008877 KEY_1 
irsend: 00000000000048b7 KEY_2 
irsend: 000000000000c837 KEY_3 
irsend: 00000000000028d7 KEY_4 
irsend: 000000000000a857 KEY_5 
irsend: 0000000000006897 KEY_6 
irsend: 000000000000e817 KEY_7 
irsend: 00000000000018e7 KEY_8 
irsend: 0000000000009867 KEY_9 
irsend: 00000000000008f7 KEY_0 

如何抓住每一行,並獲得代碼和鍵名和輸出他們變成JSON格式?

EG:

[ 
    {"code": "00000000000010ef", "key": "KEY_POWER" }, 
    {"code": "0000000000008877", "key": "KEY_1" }, 
    {"code": "00000000000048b7", "key": "KEY_2" } 
] 
+2

您可以使用'jq'實用程序在'bash'腳本中操縱JSON。 – Barmar

+0

這不是有效的JSON。 JSON字符串必須用雙引號,而不是單引號。 – Barmar

+0

@Barmar只是一個概念,但請參閱編輯 – Timmo

回答

1

使用AWK您例如:

irsend LIST lgtv "" | awk 'BEGIN{print "["}{{printf("{'"'"'code'"'"' : '"'"'%s'"'"', '"'"'key'"'"', '"'"'%s'"'"'}\n",$2,$3)}END{print "]"}' 

瘋狂'"'"'結構可以確保一個'實際上是輸出。使用雙引號是容易(JSONier):

irsend LIST lgtv "" | awk 'BEGIN{print "["}{{printf("{\"code\" : \"%s\", \"key\", \"%s\"}\n",$2,$3)}END{print "]"}' 
+0

編輯答案時,您不需要保留原始的錯誤代碼。任何有興趣的人都可以查看編輯歷史記錄。這不像編輯一個問題,應該保留原始代碼以保持答案的上下文。 – Barmar

+0

@Barmar接受並修復 - 我只是懶惰。 – kabanus

3

這裏的關鍵是-R命令行選項,這允許讀入一在-A-時間線。有了您的輸入,下面的調用產生所示的結果(部分):

$ jq -c -R 'split(" ") | {code: .[1], key: .[2]}' input.txt 
{"code":"00000000000010ef","key":"KEY_POWER"} 
{"code":"0000000000008877","key":"KEY_1"} 
{"code":"00000000000048b7","key":"KEY_2"} 

你可能要考慮令牌化輸入字符串,例如如果你的JQ具有splits/1

[splits(" +")] | {code: .[1], key: .[2]} 

注意splits/1產生的流,而split/1產生的陣列。

如果您想將結果作爲單個數組,則可以將上述內容輸入jq -s .