1

大きな 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 ファイルを 3 分の 1 に分割し、最も近い区切り文字で分割する機能です。それが常に真の 3 分の 1 であるとは限らないことを私は知っています。

これをbashで達成する方法についてのアイデアはありますか?

4

2 に答える 2

0

csplit でこれを行う方法はないと思います。awk を使用して、それぞれ 1000 個の yaml ドキュメントのファイルに分割できました。

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

ちょうど 3 つのファイルを取得するには、次のようにします。

awk '/---/{f="rendered-"(++i%3);}{print > f;}' app.yaml
于 2020-10-08T21:04:57.867 に答える