ファイル(例を参照)を別々のファイルに分割する必要があります。各新しいファイルは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
変数はn
2番目のフィールド(名前)に設定されます。/^EOD/{print k > n".txt";}
:この行がで始まる場合は、EOD
変数k
(現在のレコード全体が含まれています)を前の手順で保存した名前のn.txt
ファイルに印刷します。n
答え2
awk '/#Name/{ x=$NF; }; /#End_of_file_header/,/EOD/{ print > x} ' test1
行が始まると、#name
行x
の最後の単語が保存されます。次に、#End_of_file_header
で区切られたすべてのチャンクの名前を持つEOD
ファイルに行を印刷します。x
これによりファイルヘッダーがスキップされ、データのみがファイルに保存されます。