2014-12-20 3 views
-2

각 메시지가 #START이라는 태그로 시작하고 #END이라는 태그로 끝나는 많은 메시지가 포함 된 파일이 있습니다. 주 파일의 모든 메시지를 별도의 파일로 저장해야합니다. 즉 주 파일의 메시지 수가 출력 파일의 수와 같아야합니다. 출력 파일의 이름 지정 규칙에는 문제가 없지만 번호를 매겨 야합니다.유닉스 - 하나의 파일에서 개별 파일을 다른 파일로 추출하는 방법

+1

당신은 무엇을 시도 했습니까? – whoan

+0

나는 sed와 awk 명령에 익숙하지 않다. 정말로 어떻게 진행해야할지 모른다. –

+0

나는 당신이 sed와 awk에서 읽어야한다고 말하고 싶다. 이 사이트는 일반적인 교육 사이트가 아닌 특정 질문에 대한 도움을 제공하기위한 것입니다. –

답변

1

AWK를 사용하여 쉽게 수행 할 수 있습니다.

BEGIN { 
    counter = 0; 
    active = 0; 
    current_file = ""; 
} 

/^#START/ { 
    counter += 1; 
    current_file = "message" counter ".txt"; 
    active = 1; 
    printf("") > current_file; 
    next; 
} 

/^#END/ { 
    active = 0; 
    close(current_file); 
    next; 
} 

(active) { 
    print($0) > current_file; 
} 

작은 유한 상태 시스템을 구현 한 것은 무엇입니까? 그것에는 활성비활성 두 개의 상태가 있습니다. 비활성화에서 활성에서 #SART으로 읽고 #END에서 다시 전환합니다. 활성 상태에서는 읽는 각 줄을 current_file이라는 파일로 리디렉션합니다. 비활성에서 각 전환시부터 활성까지 카운터 counter (이는 current_file 생성에 사용됨)이 증가합니다.

당신이 샘플 입력 사용

$ awk -f extract.awk input.log 

를 통해 파일 inputs-log에 (extract.awk 이름)이 스크립트를 실행할 수 있습니다

:

#START 
This is the first message. 
#END 
This is not a message at all. 
The second message is empty. 
#START 
#END 
#START 
This is the third message. 
It is two lines long. 
#END 

#START 
This is the fourth message. 
#END 

그것은 사이의 라인을 포함하는 파일 message1.txtmessage4.txt을 생성하는 것을 파일 내의 대응하는 태그

AWK에 대해 더 자세히 알고 싶다면 The GNU Awk User’s Guide의 첫 번째 장을 읽는 것이 좋습니다.

관련 문제