awk를 사용하여 MySQL 덤프 분할

awk를 사용하여 MySQL 덤프 분할

하나의 데이터베이스만 원하거나 필요한 대규모(250G) MySQL 덤프 파일이 있습니다. 사용하고 싶었는데파일을 분할하기 위해 검색을 좀 했고설립하다이 표현은:

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

좋은 시작처럼 보이지만(샘플 파일을 사용하면 잘 작동함) 다음과 같이 실행합니다.

awk '/CREATE DATABASE/{x="F"++i;}{print > x;}' file2

나에게 다음과 같은 오류가 발생합니다.

awk: (FILENAME=dump_all.sql FNR=1) fatal: expression for `>' redirection has null string value

SE의 다른 페이지에서는 이것이 빈 줄에 부딪혀 발생했다고 보고합니다.

나는 이 기술을 사용하여 이 파일에서 내가 원하는 부분을 얻고 싶지만 내가 알고 있는 부분은구문은 (분명히) 매우 제한적입니다. 이 작업을 수행할 수 있는 방법이 있나요?

답변1

이것이 실제 문제를 해결할 수 있을지 모르겠습니다. 실제 입력 파일을 보여주지 않으셨기 때문에 귀하가 시도하는 것이 제대로 작동할지는 알 수 없습니다. 어떤 경우든 발생하는 오류를 수정하려면 다음을 사용하세요.

awk '/CREATE DATABASE/{x="F"++i;}(x){print > x;}' file2

x이는 변수가 x설정된 경우 에만 파일로 인쇄를 시도하도록 스크립트를 수정합니다 . 발생한 오류는 모든 줄을 인쇄하려고 시도했기 때문에 발생한 것입니다. 그 중 일부는 분명히 설정되지 CREATE DATABASE않은 문자열 앞에 있습니다 x. 위의 스크립트는 다음을 작성하는 것과 동일합니다.

awk '{
      if(/CREATE DATABASE/){i=i+1; x="F"i;}
      if(x!=NULL){print > x }
     }' file2  

관련 정보