2013-04-17 3 views
0

다음 형식의 파일이 있다고 가정합니다.공통 줄 접두사를 기반으로 파일을 여러 파일로 분할

prefix1: line 1 
prefix1: line 2 
prefix1: line 3 
prefix2: line 4 

prefix2: line 5 
prefix3: line 6 

prefix3: line 7 
prefix3: line 8 
prefix3: line 9 
prefix3: line 10 
나도 전체를 포함 중 파일의 일부로 그대로 줄 바꿈과 함께, 이름 prefix1, prefix2, prefix3와 세 개의 파일로이 분할 싶습니다

. 실제 파일에서

, n 접두사와이있을 수 있습니다 단지 3

내가 직접 기능을 구현하는 파이썬 스크립트를 작성할 수 있습니다,하지만 난 awk에서 그것을 할 수있는 짧은 방법이 궁금 .

답변

3

이 한 줄은 작업 작동 : 귀하의 예제와

awk -F: '{f=$1?$1:f; print > f}' file 

:

kent$ cat file 
prefix1: line 1 
prefix1: line 2 
prefix1: line 3 
prefix2: line 4 

prefix2: line 5 
prefix3: line 6 

prefix3: line 7 
prefix3: line 8 
prefix3: line 9 
prefix3: line 10 

kent$ awk -F: '{f=$1?$1:f; print > f}' file 

kent$ head prefix* 
==> prefix1 <== 
prefix1: line 1 
prefix1: line 2 
prefix1: line 3 

==> prefix2 <== 
prefix2: line 4 

prefix2: line 5 

==> prefix3 <== 
prefix3: line 6 

prefix3: line 7 
prefix3: line 8 
prefix3: line 9 
prefix3: line 10 

당신이 N 접두사를 언급했다. N이 충분히 크면 위의 awk 행은 "너무 많은 파일을 열었습니다"와 같이 실패 할 수 있습니다. 이를 해결하기 위해 우리는 텍스트를 쓰기/추가 한 후에 파일을 닫을 수 있습니다.

입니다

, 라인이 될 수있다 :

awk -F: '{f=$1?$1:f; print >> f; close(f)}' file 

이 라인에 상관없이 사용자의 입력 파일이 접두사 여부를 분류하지 않습니다 작동합니다.

관련 문제