话说某雄是个菜鸟程序员之余还是个菜鸟OP
今晚做了一个从文件到数据库的尝试。
需求是这样的:
文件中有两千多条记录,每条有三个数据,数据与数据间用空格分隔
要生成一个sql文件,把这些记录中的数据赋给数据表中的三个字段,其他字段是常量,插入一个数据表t_target
郭公推荐在shell script中使用awk,一翻查阅了解到这个东西是一种针对行的操作,根据空格判断单行中各个记录
(eg: 记录:RichardF is niubility在使用awk后被判定为:$1=RichardF, $2=is, $3=niubility)
完成一行记录的操作后自动到下一行
(
eg:
shell:echo -e “a b c\n1 2 3″ | awk ‘{print “a=” $1 ” b=” $2 ” c=” $3}’
output: a=a b=b c=c
a=1 b=2 c=3
)
那么大体思路就很显然了,直接在shell script 中拼接字符串成sql插入语句,中间的参数使用awk分别获得,然后管道输出到指定文件。
而中间涉及到一些小问题:
如何在awk中输出单引号?
答:用一对单引号夹住转义单引号,即:’\’’
如何在awk中使用正则表达式?
答:因为需求中只是固定地替换一个字符串的一部分,故此处的解决方法为在执行awk的print方法前做 一个gsub的小处理
(
eg:
shell script: echo -e “/abc/1/2\n/abc/3/4″ | awk ‘{gsub(”/abc/”,”2008/”,$0);print $0
output: 2008/1/2
2008/3/4
)
解决这两个小问题后,大功告成,特别鸣谢大能的郭公以及把原文件数据分隔设定为空格的poppy以及baidu
有时间再行补充更详细的awk用法~
December 18th, 2008 at 3:19 am
先沙发再看
December 18th, 2008 at 3:23 am
恩,总结的很好~
December 18th, 2008 at 3:24 am
To guobin:您教导有方~
December 18th, 2008 at 12:52 pm
又没了SF,555
December 18th, 2008 at 12:56 pm
话说当年用mysql时,仿佛有一个从TXT导入至数据库的功能,只要在mysql写好TXT数据分隔的格式就行~~
December 18th, 2008 at 1:19 pm
To 太后:需求有点不同吧,这次数据文件和数据表的字段不是一一对应的……
December 18th, 2008 at 9:20 pm
成长了
December 20th, 2008 at 2:08 pm
RichardF is niubility~
哈啥~~
December 20th, 2008 at 3:04 pm
To mocha:这个……你理解为Hello World就好了~
January 2nd, 2009 at 10:03 pm
仿佛編程語言還是有那么一點共通性的,明少少……但是無資格討論羅,嗚嗚~~