我正在尝试使用 AWK 拆分包含多个 SSL 证书的文件,但显示错误消息: awk:输出文件太多 10
我正在使用的命令如下:
cat ${SSL_CERTIFICATES_PATH} | awk '/BEGIN/ { i++; } /BEGIN/, /END/ { print > i ".extracted.crt" }'
错误信息:
awk: too many output files 10
record number 735
你知道我该如何解决这个问题吗?
你必须close()
文件,
awk '/BEGIN/ {f=i++".extracted.crt"}/BEGIN/,/END/{print > f;if(/END/)close(f)}'
Ed Morton建议的最佳解决方案,不应使用范围表达式,有关详细信息,请阅读此处
awk '/BEGIN/{f=(++i)".extracted.crt"} f{print>f} /END/{close(f);f=""}'
这是示例(不是证书(
输入
$ cat file
BEGIN
1
END
BEGIN
2
END
BEGIN
3
END
执行
$ 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
输出文件
$ ls *.crt
0.extracted.crt 1.extracted.crt 2.extracted.crt
每个文件内容
$ for i in *.crt; do echo $i; cat $i; done
0.extracted.crt
BEGIN
1
END
1.extracted.crt
BEGIN
2
END
2.extracted.crt
BEGIN
3
END
每次变量 i 的值增加 1 时,我们都必须关闭文件,因此请尝试关注并让我知道这是否对您有帮助。
awk '/BEGIN/ {close(i".extracted.crt");i++} /BEGIN/, /END/ { print > i".extracted.crt" }' ${SSL_CERTIFICATES_PATH}
编辑:泽维尔,我已经与一位拥有SUN 5的朋友进行了检查,并且遵循工作良好,没有任何错误。您可以根据需要放置变量。
/usr/xpg4/bin/awk '/BEGIN/ {close(i".extracted.crt");i++} /BEGIN/, /END/ { print > i".extracted.crt" }' *.crt