bash - 将海量yaml文件拆分为N个有效yaml文件

标签 bash split yaml csplit

我有一个大的 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 render- app.yaml "/---/""{3}"

这并不理想。我真正想要的是能够将 yaml 文件分成三份,并在最接近的分隔符处进行分割。我知道这并不总是真正的三分之二。

关于如何在 bash 中完成此任务有什么想法吗?

最佳答案

我认为 csplit 没有办法做到这一点。我能够使用 awk 将其分成 1000 个 yaml 文档的文件:

awk '/---/{f="rendered-"int(++i/1000);}{print > f;}' app.yaml

要获取三个文件,您可以尝试以下操作:

awk '/---/{f="rendered-"(++i%3);}{print > f;}' app.yaml

关于bash - 将海量yaml文件拆分为N个有效yaml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58053565/

相关文章:

java - 我如何从命令行运行一个 intellij Java 项目?

python - 仅拆分字符串中的长单词

amazon-web-services - 将事件规则负载配置为参数化存储桶

perl - 如何将 YAML 映射表示为流映射 {},而不是多行 block 映射?

bash - 在控制台上显示 init.d 脚本回显

linux - BASH 脚本中的 CURL 错误

php - 使用 Bash 脚本并行化 PHP 进程?

Java Split() 拆分数学方程

r - 在 R 中,如何在不使用分隔符的情况下拆分字符串

java - 如何在 Spring @Value 中注入(inject)非原始对象列表