使用 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  

相关内容