次の形式のテキストファイルがあります。
Model 1
Atom….
Atom….
Atom….
ENDMDL
Model 2
Atom….
Atom….
Atom….
ENDMDL
Model n
Atom….
Atom….
Atom….
ENDMDL
このファイルをモデルごとに分割する必要があります。新しいファイルの名前はモデル番号に基づいています。
ベストアンサー1
これは小さなツールを使用して簡単に実行できます。アッスクリプト。
#!/usr/bin/awk -f
# Write sections of the input file to separate files
# Written by PM 2Ring 2016.06.14
BEGIN{outbase = "outfile"}
/^Model/{outname = outbase $2}
{print > outname}
outbase
デフォルトのファイル名です。モデル番号が追加されるため、サンプルファイルの場合は出力ファイルが生成されますoutfile1
。outfile2
スクリプトを少し変更した場合は、outbase
awkのオプションを使用してコマンドラインでこれを設定できます-v
。
このスクリプトの鍵は
/^Model/{outname = outbase $2}
現在の行が「Model」で始まる場合は、フィールド#2の内容を文字列に追加してoutbase
結果をに割り当てますoutname
。
デフォルトでは、awkはファイルを1行ずつ処理し、スペースをフィールド区切り文字として使用して各行をフィールドに分割します。
{print > outname}
名前が保存されているファイルに現在の行を印刷しますoutname
。
このスクリプトは、内容全体をコマンドラインに書き込むのに十分小さいです。
awk 'BEGIN{outbase = "outfile"}; /^Model/{outname = outbase $2}; {print > outname}' infile.txt
実際には複数の入力ファイルパラメータを提供でき、冗長モデルがない限り、そのパラメータは正しく処理されます。