【问题标题】:Sed/awk/tr - Remove Multi Line String and Formatsed/awk/tr - 删除多行字符串和格式
【发布时间】: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 方法很复杂,必须有一种更直接的方法来处理多行条目。例如,这可以在记事本++中实现,所以我希望我能最终得到一个脚本,我可以在一个非常大的输出上运行一个文本编辑器将难以打开的脚本。

有什么建议吗?抱歉,如果这一切对你们中的一些人来说非常直截了当,但我迷失在杂草中。

【问题讨论】:

    标签: json bash awk sed grep


    【解决方案1】:

    如果 sampleInput 是包含您输入的测试文件,那么:

    awk '/"_id"/ {printf "%s", $0} /"Item Id"/ {printf "%s\n", $0}' sampleInput
    

    生成这个:

     "_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",
    

    【讨论】:

    • 为了健壮性,您可能希望通过至少检测行的开头来收紧正则表达式,就像在 Ed 的回答中一样。例如,/^\s*"_id"/ 已经是一种改进。我写了一些简单的东西,可以 (1) 工作并且 (2) 易于理解,因此您可以轻松地对其进行调整。
    【解决方案2】:
    $ awk -F'^[[:space:]]+|,[[:space:]]*$' -v OFS=, '/"_id":/{id=$2} /"Item Id":/{print id, $2}' file
    "_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"
    

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 2020-10-17
      • 2011-11-13
      • 2016-07-06
      • 2019-04-01
      • 2012-05-05
      • 2019-08-31
      • 1970-01-01
      • 2015-11-10
      相关资源
      最近更新 更多