csplit
"split files based on context" - man csplit
There is a similar, simpler tool called split
.
GNU Examples
GNU and BSD cpsplit are not compatible. In macOS you can use gcsplit
if you have brew coreutils installed.
Split amazon RDS global certs into one cert per file
curl -fsSL https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem |
csplit --elide-empty-files --quiet --prefix global-rds-crt -k - '/-BEGIN CERTIFICATE-/' '{*}'
Split a multi-doc yaml file
This is great for splitting helm template
or kubectl get pod,svc,sts,ds -o yaml
output
$ wc -l k-get-all.yaml # lots of lines in this one yaml file
9717 k-get-all.yaml
$ grep -c '^---$' k-get-all.yaml # lots of docs too
161
$ csplit k-get-all.yaml -s --elide-empty-files --prefix=yaml-split- --suffix-format='%03d.yaml' '/^---$/' '{*}'
$ wc -l yaml-split-???.yaml
38 yaml-split-000.yaml
32 yaml-split-001.yaml
...long-list-of-files...
227 yaml-split-159.yaml
230 yaml-split-160.yaml
9717 total