2008-11-14 6 views
1

$ 으로 구분 된 텍스트 (1에서 N까지)가 포함 된 파일이 있다고 가정 해 봅시다. 최종 결과가 N 파일이되도록 파일을 자르는 방법은 무엇입니까? 줄 바꿈과토큰에 파일 기반을 어떻게 분할합니까?

텍스트 1 $
텍스트 2 $ 등 ... $
textN

내가 AWK 뭔가를 생각하거나 나오지도하지만, 이미 그런 종류의 수행 가능한 유닉스 응용 프로그램이있어 태스크?

답변

2

split -p패턴?

흠. 그건 네가 원하는 것과 정확히 같지 않을 수도있다. 그것은 라인을 분할하지 않고 패턴을 볼 때만 새로운 파일을 시작합니다. 그리고 그것은 BSD 관련 시스템에서만 지원되는 것으로 보인다.

awk 'BEGIN {RS = "$"} { ... }' 

편집 :

당신은 같은 것을 사용할 수 당신은 여기 { ... } 부분에 대한 영감을 찾을 수 있습니다 : 편집 http://www.gnu.org/manual/gawk/html_node/Split-Program.html

: 감사 dmckee에서 의견을 , 그러나 csplit 또한 패턴이 발생하는 전체 라인을 복사하는 것처럼 보입니다.

+0

흠, 내'split'은'-p' 옵션을 가지고 있지 않습니다 - OS는 무엇입니까? –

+0

Mac OS 있습니다. 또한 "csplit"을 고려하십시오. – dmckee

+0

저는 BSD UNIX를 기반으로하는 Mac OS X에 있습니다. http://www.freebsd.org/cgi/man.cgi?query=split을 참조하십시오. –

1

이 권리를 읽으려면 UNIX cut 명령을 사용할 수 있습니다.

cut -d $ -f 1- filename 

구문이 약간 꺼져있을 수 있지만 $ 분리 된 필드를 사용 중이며 끝에서 1 필드를 반환한다는 것을 알 수 있습니다.

$를 이스케이프해야 할 수 있습니다.

+0

한 줄에이 파일이 없으며 여러 파일을 생성하지 않습니까? – dlamblin

3

awk 'BEGIN {RS = "$"; ORS = ""} {textNumber ++; print $ 0> "text"textNumber ".out"} 'fileName

Bill Karwin에게 감사드립니다.

편집 : ORS = ""를 추가하여 각 파일 끝에 줄 바꿈을 인쇄하지 마십시오.

1
awk -vRS="$" '{ print $0 > "text"t++".out" }' ORS="" file 
1

split 명령을 사용하면 문자열을 사용하여 분할 할 수 있습니다.

하지만 csplit 명령을 사용하면 정규식을 기반으로하는 파일을 줄일 수 있습니다.