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를 사용하여 따옴표 사이에 개행 문자를 추가할 수 있습니다.