【发布时间】:2020-01-22 23:59:49
【问题描述】:
我有一个很大的 yaml 文件:
---
foo: bar
baz:
bacon: true
eggs: false
---
goo: car
star:
cheese: true
water: false
---
dog: boxer
food:
turkey: true
moo: cow
---
...
我想做的是将此文件拆分为 n 个有效的 yaml 文件。
我尝试在 bash 中使用 csplit 执行此操作:
但最终会得到比我想要的更多的文件:
csplit --elide-empty-files -f rendered- example.yaml "/---/" "{*}"
或最后一个文件包含大部分内容的拆分:
csplit --elide-empty-files -n 3 -f rendered- app.yaml "/---/" "{3}"
这是不理想的。我真正想要的是能够说,将 yaml 文件分成三份,并在最近的分隔符处分割。我知道这并不总是真正的三分之二。
关于如何在 bash 中完成此任务的任何想法?
【问题讨论】:
-
我不是 yml 专家。所以,不确定有效的 yml 是什么意思。对于上面的输入,你能显示输出吗?
csplit --elide-empty-files -f rendered- example.yaml "/---/" "{*}"似乎生成了有效文件。 -
@anishsane 是的,但我想要的是一个文件说分成 3 个文件,它试图在这 3 个文件中平均分配有效的 yaml。而不是在
---上拆分并让第三个文件包含所有剩余的 yaml -
您可以
grep -c '^---$',将其除以 3,然后将该数字用于{repetition}。例如,如果文件包含 50 个条目,请使用csplit --elide-empty-files -n 3 -f rendered- app.yaml "/---/" "{16}"