【问题标题】:Generate raw output with headers and block separators in JQ在 JQ 中生成带有标题和块分隔符的原始输出
【发布时间】:2021-07-16 03:09:58
【问题描述】:

使用 JQ,我需要将 JSON 对象转换为一种非常特殊的格式,称为 zmp,如下所示:

selectMailbox     user.one@domain.com
modifyFolderFlags /Inbox       ""
modifyFolderFlags /Inbox/teste ""

selectMailbox     user.two@domain.com.br
modifyFolderFlags /Inbox ""
modifyFolderFlags /Sent  ""

有了这个程序:

jq -r '.. | objects | select(.flags == "i" or .flags == "#i") | "selectMailbox \(input_filename)","modifyFolderFlags \(.path) \"\" "' *

我能够输出:

selectMailbox     user.one@domain.com
modifyFolderFlags /Inbox       ""
selectMailbox     user.one@domain.com
modifyFolderFlags /Inbox/teste ""
selectMailbox     user.two@domain.com.br
modifyFolderFlags /Inbox ""
selectMailbox     user.two@domain.com.br
modifyFolderFlags /Sent  ""

如您所见,它多次输出selectMailbox,并且缺少块分隔符(空白行)。

以下是示例输入。

/tmp/jq/user.one@domain.com

{
  "path": "/",
  "subFolders": [
    {
      "flags": "#",
      "path": "/Drafts",
      "subFolders": []
    },
    {
      "flags": "#i",
      "path": "/Inbox",
      "subFolders": [
        {
          "flags": "i",
          "path": "/Inbox/teste",
          "subFolders": []
        }
      ],
      "unreadCount": 0
    },
    {
      "path": "/Sent",
      "subFolders": []
    }
  ],
  "unreadCount": 0
}

/tmp/jq/user.two@domain.com.br

{
  "path": "/",
  "subFolders": [
    {
      "flags": "#i",
      "path": "/Inbox",
      "subFolders": []
    },
    {
      "flags": "#i",
      "path": "/Sent",
      "subFolders": []
    },
    {
      "flags": "#",
      "path": "/Trash",
      "subFolders": []
    }
  ],
  "unreadCount": 0
}

【问题讨论】:

    标签: json jq zimbra


    【解决方案1】:

    你已经非常接近解决方案了。

    当你有一个文件列表时,你可以使用jq -slurp 来创建一个包含所有文件内容的大数组。

    但是因为在您的情况下您关心文件名,另一种选择是将文件的内容与文件名连接到一个对象中。

    以你的情况为例:

    jq  -r '{"email":input_filename} + .' * 
    

    在您几乎可以应用您的解决方案之后

    jq  -r '{"email":input_filename} + . | 
            "selectMailbox \(.email)",
              (..|objects | select(.flags == "i" or .flags == "#i") |
                              "modifyFolderFlags \(.path) \"\" " 
              ),"" ' *
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      • 2016-04-30
      相关资源
      最近更新 更多