연속적인 패턴 쌍을 기반으로 파일에서 라인을 추출하고 별도의 파일로 출력합니다.

연속적인 패턴 쌍을 기반으로 파일에서 라인을 추출하고 별도의 파일로 출력합니다.

a) 특정 패턴과 일치하는 모든 줄을 추출해야 하는 대용량 파일이 있습니다. 예를 들어 paterna 및 Patternb를 가정해 보겠습니다. 따라서 ^patterna처럼 패턴a로 시작하는 모든 줄과 ^patternb처럼 패턴b로 시작하는 모든 줄을 추출해야 합니다. 그런 다음 출력은 Patternpatternb.txt라는 파일에 기록됩니다.

b) 루프를 사용하여 이 작업을 어떻게 수행할 수 있습니까? 예를 들어, 패턴2와 패턴b2에 대해 동일한 작업을 수행한 다음 패턴a3 및 패턴b3에 대해 동일한 작업을 수행합니다. 그러면 파일은 라인과 일치하는 새로운 패턴 쌍을 사용하여 매번 여러 번 구문 분석되며 최종 출력은 3이 됩니다. 파일:

패턴 apatternb.txt
패턴 a2patternb2.txt
패턴 a3patternb3.txt

입력 예
001 876786
989 74563
734 87387


600: 기타 문자
601: 기타 문자

001 712345
345 87238


600: 특정 텍스트
702: 다른 텍스트

001 5342
989 745632
734 873872


600: 기타 문자
601: 기타 문자

001 987 345 87238


600: 특정 텍스트
702: 다른 텍스트

모드 a: ^001 모드 b: 600: 일부 텍스트

출력은 600:sometext.txt라는 파일이 됩니다.

001 876786
600: 특정 텍스트
001 712345
600: 특정 텍스트
001 5342
600: 특정 텍스트
001 987
600: 특정 텍스트

실제로 패턴 쌍의 첫 번째 요소는 ^001이고 두 번째 요소는 각각 세 자리 숫자로 시작하고 그 뒤에 :, 공백이 오는 줄입니다.

답변1

awk '/patterna/ || /patternb/ { print > "patternapatternb.txt" }
     /patternc/ || /patternd/ { print > "patterncpatternd.txt" }
     # ... more rules following same scheme; replace with real patterns ...
     /patterny/ || /patternz/ { print > "patternypatternz.txt" }' inputfile

코드를 script.awk파일에 넣고 awk -f script.awk inputfile.또는 위와 같이 여러 줄 명령줄을 만듭니다. GNU Bash 쉘에서는 *를 사용하여 개행 문자를 삽입 할 수 있습니다.Ctrl-V Ctrl-J

루프는 단 하나뿐입니다(실행에 의한 암시적 레코드 처리 루프 awk). 파일은 한 번만 통과하면 됩니다.


* 따옴표 없이 줄 끝에 새 문자를 추가하는 경우에만 Enter를 사용하여 따옴표 사이에 개행 문자를 추가할 수 있습니다.

관련 정보