我有一個相當大(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