使用 awk 分割 MySQL 轉儲

使用 awk 分割 MySQL 轉儲

我有一個相當大(250G)的 MySQL 轉儲文件,我只想要/需要一個資料庫。我本來希望使用awk分割文件,所以我做了一些搜尋和成立這個表達式:

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)報告說這是由於遇到了空白行。

我很想使用這種技術從這個文件中獲得我想要的部分,但我的知識awk語法(顯然)非常有限。有什麼方法可以讓這份工作發揮作用嗎?

答案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  

相關內容