1

次のようなテキスト ファイルがあります。

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 を含むファイルに配置します。以下は、1 つのファイルの内容です。これらのファイルは約 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ステートメントを閉じるだけでよいと思いました。私にとっては何もうまくいきませんでした。誰かがこれを機能させるためにこれに近い声明を追加するのを手伝ってもらえますか? または代替ソリューション?

4

2 に答える 2

1

新しいファイルを開く前に、出力ファイルを閉じる必要があります。また、ファイルを何度も上書きするのではなく>>、ファイルに追加することをお勧めします。x>

nawk '/valcred/{close(x);x="F"++i;printf "" > x}{print >> x;}' input_file.txt

また、を使用して最初に使用するときにファイルを切り捨てていることに注意してくださいprintf "" > x

于 2014-06-12T19:12:24.997 に答える
0

これをスクリプト ファイルに入れて、分割するテキスト ファイルに対して実行します。

#!/usr/bin/awk -f

BEGIN { valnum=0 }

/^valcred/ {valnum++
            close(output)
            print $0 > valnum}
/^ certificate/ { print $0 > valnum }
于 2014-06-12T19:21:23.573 に答える