下面是 curl 命令输出(关于分支的文件信息),需要脚本或命令来打印文件名、文件类型和大小。
我尝试过jq
但能够获取单个值(jq '.values[].size'
)
{
"path": {
"components": [],
"name": "",
"toString": ""
},
"revision": "master",
"children": {
"size": 5,
"limit": 500,
"isLastPage": true,
"values": [
{
"path": {
"components": [
".gitignore"
],
"parent": "",
"name": ".gitignore",
"extension": "gitignore",
"toString": ".gitignore"
},
"contentId": "c9e472ef4e603480cdd85012b01bd5f4eddc86c6",
"type": "FILE",
"size": 224
},
{
"path": {
"components": [
"Jenkinsfile"
],
"parent": "",
"name": "Jenkinsfile",
"toString": "Jenkinsfile"
},
"contentId": "e878a88eed6b19b2eb0852c39bfd290151b865a4",
"type": "FILE",
"size": 1396
},
{
"path": {
"components": [
"README.md"
],
"parent": "",
"name": "README.md",
"extension": "md",
"toString": "README.md"
},
"contentId": "05782ad495bfe11e00a77c30ea3ce17c7fa39606",
"type": "FILE",
"size": 237
},
{
"path": {
"components": [
"pom.xml"
],
"parent": "",
"name": "pom.xml",
"extension": "xml",
"toString": "pom.xml"
},
"contentId": "9cd4887f8fc8c2ecc69ca08508b0f5d7b019dafd",
"type": "FILE",
"size": 2548
},
{
"path": {
"components": [
"src"
],
"parent": "",
"name": "src",
"toString": "src"
},
"node": "395c71003030308d1e4148b7786e9f331c269bdf",
"type": "DIRECTORY"
}
],
"start": 0
}
}
预期输出应如下所示
.gitignore FILE 224
Jenkinsfile FILE 1396
对于问题中提供的用例,@JigglyNaga 的答案可能比这更好,但是对于一些更复杂的任务,您还可以使用以下方式遍历列表项
keys
:来自
file
:或从字符串:
因此,例如,您可以使用:
如果值没有换行符,则可以
jq
在循环内通过一次调用来实现它,这会使其更快:提取成员
.children.values[]
输出数组的每个成员.values
。|
通过下一个过滤器将先前的结果传递给管道,就像一个壳管[
...,
...,
...]
使里面的所有术语出现在一个数组中-c
选项产生“紧凑”格式,即。每行一个对象结果:
格式化结果
如果你想输出一个整齐排列的表格,那么其他工具可以更好地处理这项任务,例如
column
或paste
。-t
告诉column
根据输入猜测列数-s...
指定分隔符结果:
这取决于文件名中没有出现的字符
[
、和]
,这不是一个安全的假设。,
"
paste
也可以并排排列多个输入。为此,我们可以完全删除 JSON 结构,并输出原始行(向@muru 致敬):paste - - -
表示 3 列,全部从同一来源读取。这一次,唯一的假设是文件名不包含换行符。jq
可以将其输出渲染成多种格式:见https://stedolan.github.io/jq/manual/#Formatstringsandescaping对于制表符分隔的输出:
解决方案
ramda-cli
:首先,我们遍历值列表,然后在列表上进行映射,
flat
以将作为深层对象结构的每个条目转换为浅层对象结构,键由点分隔。然后,我们可以再次映射列表,并根据路径选择所需的属性,用字符串表示。
最后,
-o tsv
负责将列表的结果列表转换为 tsv 格式。要调试或进一步了解正在发生的事情,您可以通过从命令末尾逐个删除它们并观察每个步骤的输出差异来检查每个参数的作用。它们只是从左到右一次一个地应用于数据的操作(或函数)。
一种基于
jtc
和 xargs 的班轮解决方案:注意:您的文件中存在 json 不规则性(每条记录中都不存在大小键),要排除它,第一个参数
-x
是以这种方式构建的(仅处理存在大小的那些记录)。