如何使用jq的@tsv将指定JSON转换为目标TSV格式?
使用jq的@tsv过滤器生成指定格式的TSV文件
需求说明
原始JSON内容:
{ "application": "grafana", "users": { "admin": { "display-name": "admin", "access": "admin" }, "user1": { "display-name": "user1", "access": "read" }, "user2": { "display-name": "user2", "access": "edit" } } }
期望生成的TSV格式:
Application User Access grafana admin admin user1 read user2 edit
需要用jq的@tsv过滤器实现上述格式转换。
解决方案
可以使用以下jq命令完成转换:
jq -r '["Application", "User", "Access"], (.application as $app | .users[] | [$app, .["display-name"], .access] | if index($app) > 0 then .[0] = "" else . end) | @tsv' input.json
命令解释
["Application", "User", "Access"]:构造表头数组,作为TSV的第一行。.application as $app | .users[]:提取应用名称并保存为变量$app,遍历所有用户对象。[$app, .["display-name"], .access]:为每个用户构造包含应用名、用户名、权限的数组。if index($app) > 0 then .[0] = "" else . end:判断当前行是否为表头后的第一行数据,若非第一行则将应用名字段置空,实现后续行应用名不重复的效果。| @tsv:将所有数组转换为TSV格式,-r参数用于输出原始字符串(不带JSON引号)。
执行该命令后,即可得到符合要求的TSV输出。
内容的提问来源于stack exchange,提问作者qch2012
相关产品推荐
相关产品推荐

