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당신이 얻는 오류는 모든 줄을 인쇄하려고하기 때문에 발생하며 그 중 일부는 분명히 unset CREATE DATABASEstrings 이전에 있습니다 x. 위 스크립트는 다음을 작성하는 것과 동일합니다.

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

관련 정보