拆分SSL证书时出错“awk:输出文件太多10”

时间:2017-07-24 16:22:51

标签: bash unix ssl awk openssl

我正在尝试使用AWK拆分包含多个SSL证书的文件,但显示错误消息: awk:输出文件太多10

我正在使用的命令如下:

function submitForm(){
    //do some stuff
}

jQuery(document).ready(function(){
    window.timeout=null;
    jQuery('#query').on('keyup', function(event){
        clearTimeout(window.timeout);
        window.timeout = setTimeout(submitForm, 1000); // waits 1 second for user to press a new key 
    });
});

错误讯息:

cat ${SSL_CERTIFICATES_PATH} | awk '/BEGIN/ { i++; } /BEGIN/, /END/ { print > i ".extracted.crt" }'

你知道我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:3)

你必须close()档,

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

Ed Morton建议的最佳解决方案,不应使用范围表达式,以获取更多详细信息Read Here

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

答案 1 :(得分:1)

我们必须在每次变量值增加1时关闭文件,所以请尝试关注并告诉我这是否对您有帮助。

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

编辑: Xavier,我已经和一位拥有SUN 5的朋友一起检查过并且工作顺利,没有任何错误。您可以根据需要放置变量。

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