Error "awk: too many output files 10" when splitting SSL certificates Error "awk: too many output files 10" when splitting SSL certificates unix unix

Error "awk: too many output files 10" when splitting SSL certificates


You have to close() file,

awk '/BEGIN/ {f=i++".extracted.crt"}/BEGIN/,/END/{print > f;if(/END/)close(f)}'

The Best solution as suggested by Ed Morton, one should not use range expressions, for more details Read Here

awk '/BEGIN/{f=(++i)".extracted.crt"} f{print>f} /END/{close(f);f=""}' 

Here is sample (not certificate)

Input

$ cat fileBEGIN1ENDBEGIN2ENDBEGIN3END

Execution

$ awk '/BEGIN/{f=i++".extracted.crt"}/BEGIN/,/END/{print > f;if(/END/)close(f)}' file

$ awk '/BEGIN/{f=(++i)".extracted.crt"} f{print>f} /END/{close(f);f=""}' file

Output files

$ ls *.crt0.extracted.crt  1.extracted.crt  2.extracted.crt

File contents of each

$ for i in *.crt; do echo $i; cat $i; done0.extracted.crtBEGIN1END1.extracted.crtBEGIN2END2.extracted.crtBEGIN3END


We have to close the files each time variable i's value gets increases by 1, so try following and let me know if this helps you.

awk '/BEGIN/ {close(i".extracted.crt");i++} /BEGIN/, /END/ { print > i".extracted.crt" }' ${SSL_CERTIFICATES_PATH}

EDIT: Xavier, I have checked with a friend who has SUN 5 with him and following worked well without any error. You could put variable as per your need.

/usr/xpg4/bin/awk '/BEGIN/ {close(i".extracted.crt");i++} /BEGIN/, /END/ { print > i".extracted.crt" }' *.crt