パターンを使用してファイルを別々のファイルに分割する

パターンを使用してファイルを別々のファイルに分割する

ファイル(例を参照)を別々のファイルに分割する必要があります。各新しいファイルは7行SAMPLE1.txtなどの名前を継承する必要があります。SAMPLE2.txt

@File_Version: 4
@Coordinate_Type_is: 1
@Export_Type_is: 1
@Number_of_P: 1
@T_Type_Name: , 
#File_Version____________-> 4
#Name____________-> SAMPLE1
#Type____________-> 3

#End_of_file_header
    000000.00000    0000000.00000   0000.00000
    000000.00000    0000000.00000   0000.00000
...
EOD

@File_Version: 4
@Coordinate_Type_is: 1
@Export_Type_is: 1
@Number_of_P: 1
@T_Type_Name: , 
#File_Version____________-> 4
#Name____________-> SAMPLE2
#Type____________-> 3

#End_of_file_header
    000000.00000    0000000.00000   0000.00000
    000000.00000    0000000.00000   0000.00000
...
EOD

@File_Version: 4
@Coordinate_Type_is: 1
@Export_Type_is: 1
@Number_of_P: 1
@T_Type_Name: , 
#File_Version____________-> 4
#Name____________-> SAMPLE3
#Type____________-> 3

#End_of_file_header
    000000.00000    0000000.00000   0000.00000
    000000.00000    0000000.00000   0000.00000
...
EOD

ベストアンサー1

あなたはこれを行うことができますawk

awk '{
        if(/@File_Version:/){k=$0;}
        else{k=k"\n"$0}
     } 
    /^#Name/{n=$2}
    /EOD/{
        print k > n".txt"; 
    }' file 

説明する

  • if(/^@File_Version:/){k=$0;}:行が@File_Version:.で始まる行をk。として保存します。
  • else{k=k"\n"$0}:他のすべての行に改行文字(\n)を追加し、その後に現在の行の現在の値を追加しますk
  • /^#Name/{n=$2}:この行がで始まる場合、#Name変数はn2番目のフィールド(名前)に設定されます。
  • /^EOD/{print k > n".txt";}:この行がで始まる場合は、EOD変数k(現在のレコード全体が含まれています)を前の手順で保存した名前のn.txtファイルに印刷します。n

おすすめ記事