【发布时间】:2019-07-25 13:47:01
【问题描述】:
我的文件包含多个 SQL 查询,由 ;我想要一个为每个 SQL 查询创建不同文件的脚本
【问题讨论】:
-
那么,你到底卡在哪里了?
-
恭喜!欢迎来到 SO。很想帮忙!请read this guide for asking good questions.
-
试试 csplit unix 命令
我的文件包含多个 SQL 查询,由 ;我想要一个为每个 SQL 查询创建不同文件的脚本
【问题讨论】:
欢迎来到 SO。在这个网站上你会找到愿意帮助你的专业程序员和编程爱好者,但你应该先自己做一些努力。
我将为您提供解决问题的先机。在新/空目录中尝试以下代码,看看它做了什么;-)
$ myfile=tmp.log
$ echo 'insert into bla where x=1; select * from derp; delete * from * where 1=1;' > $myfile
$ while read -d ';' query; do echo $query >> `echo $query | md5sum | grep -Eo '^[^ ]*'`.sql ; done < $myfile
$ for i in *sql; do echo -n "$i: "; cat $i; done
397ef94bdde1d41e546ad00cd0ca0e20.sql: delete * from * where 1=1
cdd2e2af0889c51ab9dc3be7b2a359e2.sql: select * from derp
e617194b23b1cac13bd8c743fb38f84c.sql: insert into bla where x=1
编辑:解释:
这一行从$myfile逐行读取,由-d ':'分隔,并将查询$query回显到屏幕:while read -d ';' query; do echo $query ; done < $myfile
循环体生成一个内容为$query的文件。我不知道您想如何命名每个文件,因此我冒昧地将文件命名为查询的md5sum。 grep 仅用于删除md5sum 字符串的一小部分。 echo $query >> `echo $query | md5sum | grep -Eo '^[^ ]*'`.sql
用` 包裹的所有内容都会首先执行,并使用从该命令返回的数据,但也会使用$()。示例:
$ ls `echo $HOME`
$ ls $(echo $HOME)
【讨论】: