Mik*_*kel 6 sorting bash json key jq
我有以下 JSON 片段:
{
"root_path": "/www",
"core_path": "/www/wp",
"content_path": "/www/content",
"vendor_path": "/www/vendor"
}
Run Code Online (Sandbox Code Playgroud)
我想jq首先使用来获取按长度降序排序的值:
/www/content
/www/vendor
/www/wp
/www
Run Code Online (Sandbox Code Playgroud)
我需要这些,以便我可以与文件列表进行匹配,以查找文件存在于哪个命名路径中。
然后我想jq再次使用来交换值的属性(它可以删除重复的属性,没关系):
{
"/www": "root_path".
"/www/wp": "core_path",
"/www/content": "content_path",
"/www/vendor": "vendor_path"
}
Run Code Online (Sandbox Code Playgroud)
对于第二个查询,我的用例是能够查找匹配的路径值并找到其路径名,然后我将在具有相同架构的第二个 JSON 片段中使用它来获取命名路径的值。
我的用例是用于网站部署,我有一个包含文件名的配置文件,因为它们将存在于部署服务器上,应该从源服务器复制到部署服务器,但服务器可能具有不同的目录布局。
我需要为此使用 Bash,但如果有更好的方法来做我想做的事情,我愿意。也就是说,我真的很想学习如何jq更好地使用,所以我更愿意学习如何使用jq这些转换。
我正在使用jq版本1.5
pea*_*eak 16
按长度降序排列的值:
[.[]] | sort_by(length) | reverse[]
Run Code Online (Sandbox Code Playgroud)
交换值的属性
with_entries(.key as $k | .key=.value | .value=$k )
Run Code Online (Sandbox Code Playgroud)
一种解决方案将合并的问题可以通过组合上述两种解决方案来制作,因为with_entries是的组合to_entries和from_entries:
to_entries
| map(.key as $k | .key=.value | .value=$k )
| sort_by(.key|length)
| reverse
| from_entries
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5056 次 |
| 最近记录: |