Bash脚本 - irsend LIST输出到JSON

时间:2017-04-18 16:44:27

标签: json bash jq

我有这个命令:

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 个答案:

答案 0 :(得分:3)

这里的关键是-R命令行选项,它允许一次一行地读取行。根据您的输入,以下调用将生成显示的结果(截断):

$ 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 .

答案 1 :(得分: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 "]"}'