특수 문자까지 파일을 읽고 해당 부분을 다른 파일에 복사한 후 eof까지 계속합니다.

특수 문자까지 파일을 읽고 해당 부분을 다른 파일에 복사한 후 eof까지 계속합니다.

Linux에서 파일을 읽으려고 하는데 "&" 문자가 나타나면 출력을 다른 파일에 쓰고 해당 파일을 다른 폴더로 보낸 다음 다음 "&"가 나올 때까지 원본 파일을 계속 읽습니다.

XML 파일 입력 -

<Document>
<tag1>
<tag2>
</Document>
&
<Document>
<tag3>
<tag4>
</Document>
&
<Document>
<tag5>
<tag6>
</Document>

내 코드 조각 -

while IFS= read -r line;do
     if [["$line" =="$delimeter"]];then
         echo "$line" | sed "s/delimeter.*//">> "$output_file"
         cp "$output_file" "$TARGET_FOLDER" 
         break
     else
         echo "$line" >> "$output_file"
     fi
done < "$input_file" 

그러나 코드는 구분 기호 발생에 따라 분할하는 대신 전체 파일을 출력으로 생성합니다. 어디에서 잘못되었는지 지적할 수 있습니까?

예상 출력 - 첫 번째 <Document> to </Document>(&까지) 부분은 TARGET_FOLDER에 복사되는 출력 파일에 저장됩니다. 그런 다음 다음 <Document> to </Document>섹션을 복사하세요.

당신의 도움을 주셔서 감사합니다!

답변1

직업인 것 같아요 csplit:

mkdir -p target &&
  csplit -f target/output. your-file '/^&$/' '{*}'

target/output.00, target/output.01... 파일을 생성하고 &.

줄이 제거된 target/output파일 만 원하는 경우 &다음과 같습니다.

grep -vx '&' < your-file > target/output

output또는 디렉터리의 파일 로 보내려는 경우 :target.xx

csplit -f '' -b target.%02d/output your-file '/^&$/' '{*}'

target.00단 , .. 디렉터리가 미리 존재해야 한다는 점에 유의하세요 target.n.

어떤 경우 에라도,텍스트를 처리하기 위해 쉘 루프를 사용하고 싶지 않습니다..

답변2

그리고 awk:

awk 'BEGIN{RS="&"}{print $0 > ++c".xml"}' file.xml
ls -ltr

관련 정보