【问题标题】:split files to key value pair将文件拆分为键值对
【发布时间】:2022-02-01 06:24:35
【问题描述】:
Input file
           - name: APPENV
             value: STAGING
           - name: ELASTICSEARCH_USER
             value: elastic
           - name: WRITE_LOGS_TO_ELASTICSEARCH
             value: "true"
           - name: version
             value: "5"

预期输出:

APPENV: STAGING
ELASTICSEARCH_USER: elastic
WRITE_LOGS_TO_ELASTICSEARCH: "true"
version: "5"

尝试awk -F "e:" '{print $2}' filename 仅抽象键和值,但需要将其与上述输出对齐。任何帮助将不胜感激

【问题讨论】:

    标签: awk sed grep


    【解决方案1】:

    使用您显示的示例和尝试,请尝试遵循awk 代码。

    awk 'BEGIN{OFS=": "} /^- name:/{val=$NF;next} {print val,$NF}' Input_file
    

    解释:简单的解释是,首先将所有行的OFS(输出字段分隔符)设置为: 。在主 awk 程序中检查行是否从 - name: 开始,然后将最后一个字段值分配给变量 val 并使用 next 将从这里跳过所有进一步的 awk 程序语句。当此条件(行从- name: 开始)不为真时,则打印 val 和该行的最后一个字段。



    编辑:如果您的 Input_file 在 - name: 之前确实有空格,请尝试以下代码。

    awk 'BEGIN{OFS=": "} /^[[:space:]]+- name:/{val=$NF;next} {print val,$NF}' Input_file
    

    【讨论】:

    • 谢谢,它提供了与awk -F "e:" '{print $2}' filename 相同的输出,但不是预期的预期输出
    • @Prasad,我的代码已经过测试并且运行良好,唯一的问题是它没有给出: (冒号空格),我现在已经修复了,请尝试我编辑的代码一次,然后让我知道那是怎么回事吗?
    • 仍然没有给出想要的输出。
    • 但是可以使用 ``` awk -F "e:" '{print $2}' filename | awk 'NR%2{printf "%s: ",$0;next;}1' ```
    • 是的,编辑后的代码有效。谢谢。
    【解决方案2】:

    这行得通:

    awk '
    sub(/^[[:space:]]+- name: /, ""){n=$0}
    sub(/^[[:space:]]+value: /, ""){print n": "$0}'
    

    匹配并删除name: /value: 标签,并将两行的其余部分打印在一行上。

    【讨论】:

      【解决方案3】:

      这看起来像一个 YAML 文件?在这种情况下,您可能应该使用专用的解析器,例如Mike Farah's yq

      yq e '.[] | .name + ": " + .value' infile
      

      输出:

      APPENV: STAGING
      ELASTICSEARCH_USER: elastic
      WRITE_LOGS_TO_ELASTICSEARCH: true
      version: 5
      

      使用 yq 版本 4.14.1 测试。

      【讨论】:

        【解决方案4】:

        还有awk:

        awk -v FS=': ' '!(NR%2){s=$2} (NR%2){if (s) print s ":", $2}' file
        APPENV: STAGING
        ELASTICSEARCH_USER: elastic
        WRITE_LOGS_TO_ELASTICSEARCH: "true"
        version: "5"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-05
          • 2013-08-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多