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