【发布时间】:2016-09-16 16:19:42
【问题描述】:
我有一个我在 elasticsearch 上运行的查询的输出,我想解析它以提供每行两个条目的 csv。
我正在使用的示例输出是:
{
"_index": "file__mdata",
"_type": "assets",
"_id": "24607c5a-2c6g-416a-ab88-58fha56a34ac",
"_version": 6,
"found": true,
"_source": {
"meta": {
"Item Id": "dd0bd495-a4af-49c0-95e3-554097ed6a35",
}
}
},
{
"_index": "file__mdata",
"_type": "assets",
"_id": "fgtaf7g2-32b8-4278-8ca0-3bc0g30ae592",
"_version": 8,
"found": true,
"_source": {
"meta": {
"Item Id": "de2acr1d-5d1b-4171-85d7-d76adbf50cc3",
}
}
}
计划最终得到以下结果:
"_id": "24607c5a-2c6g-416a-ab88-58fha56a34ac","Item Id": "dd0bd495-a4af-49c0-95e3-554097ed6a35"
所以我必须通过 grep -a 5 运行输出以过滤外部区域,然后通过 sed 管道流,每行带有 s 标志以删除中间的每一行(在版本行上使用 regEx)。输出最终看起来像:
"_id": "24607c5a-2c6g-416a-ab88-58fha56a34ac",
"Item Id": "dd0bd495-a4af-49c0-95e3-554097ed6a35",
"_id": "fgtaf7g2-32b8-4278-8ca0-3bc0g30ae592",
"Item Id": "de2acr1d-5d1b-4171-85d7-d76adbf50cc3",
尝试运行 tr 来删除空格似乎没有达到预期的效果,我似乎可以实现的唯一输出将所有剩余的文本放在一行上。
我觉得多管道 sed 方法很复杂,必须有一种更直接的方法来处理多行条目。例如,这可以在记事本++中实现,所以我希望我能最终得到一个脚本,我可以在一个非常大的输出上运行一个文本编辑器将难以打开的脚本。
有什么建议吗?抱歉,如果这一切对你们中的一些人来说非常直截了当,但我迷失在杂草中。
【问题讨论】: