使用 JQ - 拆分和修改后加入记录

Using JQ - Join records after been split and modified

我有一个数组,其中一些记录需要复制。 id值可能是由“;”连接的2个字符串,如下

{"_time": "2022-02-20T23","csp_name": "1","tool_bf_id": "1234", "id":"aa-1111;aa-2222"}

或 id 值为 null 或只有 1 个 ref:

{"_time": "2022-02-20T23","csp_name": "3","tool_bf_id": "1357", "dvc_ssr": "null"}
{"_time": "2022-02-20T23","csp_name": "4","tool_bf_id": "2468", "dvc_ssr": "aa-3333"}

我可以复制这条记录并得到以下信息:

{"_time": "2022-02-20T23","csp_name": "1","tool_bf_id": "1234", "dvc_ssr": "aa-1111","id":"aa-1111;aa-2222"},
{"_time": "2022-02-20T23","csp_name": "1","tool_bf_id": "1234", "dvc_ssr": "aa-2222","id":"aa-1111;aa-2222"}

感谢另一个post:

我通过加入来自另一个文件的数据来修改我的记录:

{"_time":"2022-02-20T23","csp_name":"1","tool_bf_id":"1234","id":"aa-1111;aa-2222", "dvc_ssr":"aa-1111","host":"hostId1"}
,{"_time":"2022-02-20T23","csp_name":"1","tool_bf_id":"1234","id":"aa-1111;aa-2222","dvc_ssr":"aa-2222","host":"hostId2"}

现在我需要将记录合并回去并加入新添加字段(大约 10 个)的值

{"_time": "2022-02-20T23","csp_name": "1","tool_bf_id": "1234", "id":"aa-1111;aa-2222", "host": "hostId1;hostId2"}

hosts.jsonl:

{ "host": "hostId1", "dvc_ssr": "aa-1111" }
{ "host": "hostId2", "dvc_ssr": "aa-2222" }
{ "host": "hostId3", "dvc_ssr": "aa-3333" }

records.jsonl:

{ "_time": "2022-02-20T23", "csp_name": "1", "tool_bf_id": "1234", "id":"aa-1111;aa-2222" }
{ "_time": "2022-02-20T23", "csp_name": "3", "tool_bf_id": "1357", "dvc_ssr": "null" }
{ "_time": "2022-02-20T23", "csp_name": "4", "tool_bf_id": "2468", "dvc_ssr": "aa-3333" }
jq -n --slurpfile hosts hosts.jsonl '
   INDEX( $hosts[]; .dvc_ssr ) as $host_lkup |

   inputs |
   .host =
      if has("dvc_ssr") then
         $host_lkup[.dvc_ssr].host
      elif has("id") then
         .id / ";" | map( $host_lkup[.].host ) | join(";")
      else
         null
      end
' records.jsonl

输出:

{
  "_time": "2022-02-20T23",
  "csp_name": "1",
  "tool_bf_id": "1234",
  "id": "aa-1111;aa-2222",
  "host": "hostId1;hostId2"
}
{
  "_time": "2022-02-20T23",
  "csp_name": "3",
  "tool_bf_id": "1357",
  "dvc_ssr": "null",
  "host": null
}
{
  "_time": "2022-02-20T23",
  "csp_name": "4",
  "tool_bf_id": "2468",
  "dvc_ssr": "aa-3333",
  "host": "hostId3"
}

Demo 在 jqplay