テキストファイルを新しいファイルに分割

テキストファイルを新しいファイルに分割

次の形式のテキストファイルがあります。

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デフォルトのファイル名です。モデル番号が追加されるため、サンプルファイルの場合は出力ファイルが生成されますoutfile1outfile2スクリプトを少し変更した場合は、outbaseawkのオプションを使用してコマンドラインでこれを設定できます-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

実際には複数の入力ファイルパラメータを提供でき、冗長モデルがない限り、そのパラメータは正しく処理されます。

おすすめ記事