파일(예제 참조)을 별도의 파일로 분할해야 합니다. 각각의 새 파일은 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
두 번째 필드(이름)로 설정됩니다./^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
이렇게 하면 파일 헤더를 건너뛰고 데이터만 파일에 저장됩니다.