如何在json中的每行前面插入一个包含内容的新行?
How to insert a new line with content in front of each line in json?
我认为 sed
应该是执行此操作的命令,但我还没有找到合适的命令。
我的 json 文件如下所示:
{"LAST_MODIFIED_BY":"david","LAST_MODIFIED_DATE":"2018-06-26 12:02:03.0","CLASS_NAME":"/SC/Trade/HTS_CA/1234abcd","DECISION":"AGREE","TASK_TYPE_ID":"abcd1234-832b-43b6-afa6-361253ffe1d5","NAME":"something"}
{"LAST_MODIFIED_BY":"sarah","LAST_MODIFIED_DATE":"2018-08-26 12:02:03.0","CLASS_NAME":"/SC/Import/HTS_US/9876abcd","DECISION":"DISAGREE","TASK_TYPE_ID":"abcd1234-832b-43b6-afa6-361253ffe1d5","NAME":"nicename"}
... more rows to follow
我想要实现的是 json 包含以下内容的文档:
{"index":{}}
{"LAST_MODIFIED_BY":"david","LAST_MODIFIED_DATE":"2018-06-26 12:02:03.0","CLASS_NAME":"/SC/Trade/HTS_CA/1234abcd","DECISION":"AGREE","TASK_TYPE_ID":"abcd1234-832b-43b6-afa6-361253ffe1d5","NAME":"something"}
{"index":{}}
{"LAST_MODIFIED_BY":"sarah","LAST_MODIFIED_DATE":"2018-08-26 12:02:03.0","CLASS_NAME":"/SC/Import/HTS_US/9876abcd","DECISION":"DISAGREE","TASK_TYPE_ID":"abcd1234-832b-43b6-afa6-361253ffe1d5","NAME":"nicename"}
... more rows to follow
这样我就可以运行批量加载API Elasticsearch。
最接近的是这个:,但它把我的 json 文件分成了损坏的项目,而不是我想要的格式。
如有任何想法,我将不胜感激!
使用sed
:
sed 's/^/{"index":{}}\
/'
这里的技巧是\
。
或者,如果您的 shell 支持它:
sed $'s/^/{"index":{}}\n/'
或(根据@sundeep 的建议):
sed $'i\\n{"index":{}}\n'
使用 jq:
jq -nc 'inputs | {"index":{}}, .'
这里,关键是-c
生成JSONLines的选项。
使用 awk:
awk '{print "{\"index\":{}}"; print;}'
等等
这可能适合您 (GNU sed):
sed 'i{"index":{}}' file
在每行前插入 {"index":{}}
。
我认为 sed
应该是执行此操作的命令,但我还没有找到合适的命令。
我的 json 文件如下所示:
{"LAST_MODIFIED_BY":"david","LAST_MODIFIED_DATE":"2018-06-26 12:02:03.0","CLASS_NAME":"/SC/Trade/HTS_CA/1234abcd","DECISION":"AGREE","TASK_TYPE_ID":"abcd1234-832b-43b6-afa6-361253ffe1d5","NAME":"something"}
{"LAST_MODIFIED_BY":"sarah","LAST_MODIFIED_DATE":"2018-08-26 12:02:03.0","CLASS_NAME":"/SC/Import/HTS_US/9876abcd","DECISION":"DISAGREE","TASK_TYPE_ID":"abcd1234-832b-43b6-afa6-361253ffe1d5","NAME":"nicename"}
... more rows to follow
我想要实现的是 json 包含以下内容的文档:
{"index":{}}
{"LAST_MODIFIED_BY":"david","LAST_MODIFIED_DATE":"2018-06-26 12:02:03.0","CLASS_NAME":"/SC/Trade/HTS_CA/1234abcd","DECISION":"AGREE","TASK_TYPE_ID":"abcd1234-832b-43b6-afa6-361253ffe1d5","NAME":"something"}
{"index":{}}
{"LAST_MODIFIED_BY":"sarah","LAST_MODIFIED_DATE":"2018-08-26 12:02:03.0","CLASS_NAME":"/SC/Import/HTS_US/9876abcd","DECISION":"DISAGREE","TASK_TYPE_ID":"abcd1234-832b-43b6-afa6-361253ffe1d5","NAME":"nicename"}
... more rows to follow
这样我就可以运行批量加载API Elasticsearch。
最接近的是这个:
如有任何想法,我将不胜感激!
使用sed
:
sed 's/^/{"index":{}}\
/'
这里的技巧是\
。
或者,如果您的 shell 支持它:
sed $'s/^/{"index":{}}\n/'
或(根据@sundeep 的建议):
sed $'i\\n{"index":{}}\n'
使用 jq:
jq -nc 'inputs | {"index":{}}, .'
这里,关键是-c
生成JSONLines的选项。
使用 awk:
awk '{print "{\"index\":{}}"; print;}'
等等
这可能适合您 (GNU sed):
sed 'i{"index":{}}' file
在每行前插入 {"index":{}}
。