我有一个看起来像这样的文本文件:
valcred: requestValCred [up]
certificate pki_001 [up]
certificate pki_002 [up]
certificate pki_003 [up]
certificate pki_004 [up]
certificate pki_005 [up]
valcred: internalValCred [up]
certificate pki_021 [up]
certificate pki_012 [up]
certificate pki_103 [up]
certificate pki_404 [up]
certificate pki_555 [up]
我想在每次出现“valcred”时将其拆分为新的文本文件。然后,我想将所有证书放入带有所述valcred的文件中。以下是一个文件的内容。这些文件大约有100个,每个文件都有不同的条目数。发生错误时,我得到大约20个文件。
valcred: internalValCred [up]
certificate pki_021 [up]
certificate pki_012 [up]
certificate pki_103 [up]
certificate pki_404 [up]
certificate pki_555 [up]
我正在使用此命令:
nawk '/valcred/{x="F"++i;}{print > x;}' input_file.txt
但这是出错的地方。我遇到了这个错误:
bash-2.03$ nawk '/valcred/{x="F"++i;}{print > x;}' input_files.txt
nawk: F21 makes too many open files
input record number 1743, file input_files.txt
source line number 1
我以为我只需要关闭print语句。 没有什么对我有用。有人可以帮我添加一个密切的声明,使它工作吗?或者另一种解决方案?
答案 0 :(得分:1)
您需要在打开新文件之前关闭输出文件。另外,我希望您要将>>
附加到文件x
,而不是一遍又一遍地覆盖>
:
nawk '/valcred/{close(x);x="F"++i;printf "" > x}{print >> x;}' input_file.txt
另请注意,我正在使用printf "" > x
截断首次使用文件。
答案 1 :(得分:0)
将其放入脚本文件中,然后在要分解的文本文件上运行它。
#!/usr/bin/awk -f
BEGIN { valnum=0 }
/^valcred/ {valnum++
close(output)
print $0 > valnum}
/^ certificate/ { print $0 > valnum }