Dec 18

       话说某雄是个菜鸟程序员之余还是个菜鸟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中使用正则表达式?

       答:因为需求中只是固定地替换一个字符串的一部分,故此处的解决方法为在执行awkprint方法前做 一个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用法~

10 Responses

  1. guobin Says:

    先沙发再看

  2. guobin Says:

    恩,总结的很好~

  3. admin Says:

    To guobin:您教导有方~

  4. 太后 Says:

    又没了SF,555

  5. 太后 Says:

    话说当年用mysql时,仿佛有一个从TXT导入至数据库的功能,只要在mysql写好TXT数据分隔的格式就行~~

  6. RichardF Says:

    To 太后:需求有点不同吧,这次数据文件和数据表的字段不是一一对应的……

  7. poppy Says:

    成长了

  8. mocha Says:

    RichardF is niubility~
    哈啥~~

  9. RichardF Says:

    To mocha:这个……你理解为Hello World就好了~

  10. 師妹 Says:

    仿佛編程語言還是有那么一點共通性的,明少少……但是無資格討論羅,嗚嗚~~

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.

˽ ҳϷ˽ ҳϷȫ ⴫˽ ˽ sf ˽ ߵӰ ⴫˽ ½˽ Ľ ݷ