我有一个相当大(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