큰 텍스트 파일 분할


4

큰 파일을 별도의 헤더로 그룹화하여 별도의 파일로 분할해야합니다.

예를 들어 파일에는 다음과 같은 헤더가 있습니다.

--Heading 1--
some text
text

--Heading 2--
more text etc

--Heading 3--
asdf text

큰 파일을 머리글을 기반으로 텍스트 파일로 분할해야합니다.

예를 들어, 3 개의 파일 출력이있을 것입니다.

제목 1.txt :

--Heading 1--
some text
text

제목 2.txt :

--Heading 2--
more text etc

제목 3.txt :

--Heading 3--
asdf text

누구든지이 작업을 수행 할 수있는 Windows 또는 최대 응용 프로그램 / 스크립트를 알고 있습니까?

또는 프로그래밍 언어에서 이와 같은 것을 작성하는 방법에 대한 지침을 제공 할 수도 있습니다. 나는 파이썬이나 자바를 모르지만 어쩌면 이것이 배울 시간이다. :)

감사!

답변:


3

이것은 가장 간단한 대답은 아니므로, 누군가가 더 깔끔한 것을 생각해 낼 것입니다. Mac에서 사용할 수있는 작은 스크립트를 작성했습니다.

#!/bin/bash
NUMFILES=`grep '^--.*--' $1 | wc -l`
NUMFILES=$(($NUMFILES - 2))
csplit -k $1 '%^--.*--$%' '/^--.*--$/' "{$NUMFILES}" 
for file in `ls xx*`
do
        mv $file "`head -n1 $file | sed -e 's/--\(.*\)--/\1.txt/'`"
done

이것은 다음을 사용하여 작동합니다. csplit 파일을 자르려면 요. 네 번째 줄은 기본적으로 첫 번째 줄 앞에있는 모든 것을 무시한 다음 그 뒤의 머리글을 나눕니다. 2 ~ 3 행은 csplit이 파일을 여러 번 나눠야하는 횟수를 계산합니다.

csplit 출력 파일의 이름을 xx 다음에 2 자리 숫자로 지정합니다. 마지막 4 줄은이 모든 파일의 이름을 헤더 줄에있는 이름으로 바꿉니다. -- 제거되었습니다.


2

여기에 "하나의 라이너"8-가 있습니다. 마틴이 겪은 것과 비슷합니다. 이것은 Mac에서 작동합니다. "터미널"앱을 열고 디렉토리가있는 디렉토리로 이동하십시오. myfile.txt

split -p '--.*--' myfile.txt FILE && for file in FILE*; do mv $file "$(head -1 $file | sed 's/--//g')".txt; done

추신. 디렉토리에 FILE *라는 파일이 없는지 확인하십시오. 즉, ls FILE* 아무것도 보여주지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.