파일을 여러 부분으로 분할

파일을 여러 부분으로 분할

질문: 파일이 주어지면 samplein다음과 같이 여러 부분으로 나눌 수 있습니다.

$ cat samplein
START
Unix
Linux
START
Solaris
Aix
SCO

$ awk '/START/{x="F"++i;}{print > x}' samplein
$ ls F*
F1  F2

$ cat F1
START
Unix
Linux

$ cat F2
START
Solaris
Aix
SCO

위는 레시피 5 입니다이 페이지. 그런데 첫 번째 행에 패턴(이 경우)이 나타나지 않는 상황이
발생했습니다 .START

그러나 동일한 코드/레시피에 개행 문자를 추가하면 samplein더 이상 작동하지 않습니다!

$ echo -e "firstline\n$(cat samplein)" > samplein
$ cat samplein
$ awk '/START/{x="F"++i;}{print > x}' samplein
awk: cmd. line:1: (FILENAME=samplein FNR=1) fatal: expression for `>' redirection has null string value

또한 이 awk 명령이 어떻게 작동하는지 답변에 설명해주세요. 이전에 awk를 사용한 유일한 컨텍스트는 입니다 {BEGIN}{loop over all lines}{END}. 이 레시피는 저 레시피와 약간 다릅니다!

답변1

x="F0"첫 번째 줄에 패턴이 포함되어 있지 않더라도 대상 파일이 항상 정의되도록 시작 부분에 추가하기만 하면 됩니다 .

awk 'BEGIN { x="F0" ; } /START/{x="F"++i;}{print > x}' 

위의 내용은 다음 의사코드로 분류됩니다.

### -> BEGIN { x="F0" ; }
i=0 # implicit
x="F0" # explicit
loop through file

### -> /START/{x="F"++i;}
if ( line contains "START" ) output file is F(next i value) ;

### -> {print > x}
print line to output file

endloop

모든 절(예: BEGIN, END, ) { ...}은 선택 사항이라는 점을 기억하세요.

관련 정보