这些要求对我来说并不完全清楚,但以下内容应该足以让您顺利上路。
请注意,以下假设原始换行符既不出现在 ID 也不出现在 VALUES 中。
还要注意,在下文中,每个 ID 和 VALUES 数组的第一个和最后一个元素是相同的。这是为了行使一项要求。
#!/bin/bash
ID=(1 2 3 4 1)
VALUES=("/path1" "/path2" "/path3" "/path4" "/path1")
ID=$(printf "%s\n" "${ID[@]}")
VALUES=$(printf "%s\n" "${VALUES[@]}")
jq -n --arg id "$ID" --arg values "$VALUES" '
# emit a dictionary
def set(s): reduce s as $x ({};
.[$x | (type[0:1] + tostring)] = $x);
# distinct entities in the stream s
def distinct(s): set(s)[];
[$id, $values]
| map( split("\n"))
| [distinct(transpose[])]
| map( {Id: .[0], Path: .[1]} )
'
我们使用set/1 和distinct/1 而不是unique 主要是为了确保按照要求指定的顺序保留,同时也是为了避免unique 所包含的sort。
输出:
[
{
"Id": "1",
"Path": "/path1"
},
{
"Id": "2",
"Path": "/path2"
},
{
"Id": "3",
"Path": "/path3"
},
{
"Id": "4",
"Path": "/path4"
}
]