如何在Unix shell脚本中使用awk命令将平面文件插入到oracle db中

时间:2015-03-18 09:30:47

标签: shell unix awk

我是Shell脚本的新手,我想在oracle DB(Unix OS)中插入一个平面文件。

平面文件例如(以逗号分隔)

Name,Male,B.Tech,Chennai
Name1,Male,BE,Kolkatta
Name2,Female,BE,Delhi

平面文件中的字段数可能会有所不同(不必仅为4个)。

我尝试过以下命令

awk '{print "INSERT INTO EMP VALUES(" $1 c, q $2 q, c $3, ");";}' q="'" c="," FS=, Details.bat

正在打印SQL查询,并且上述命令中的字段数也已修复。

请帮助我解决问题。

谢谢&问候 普拉卡什

2 个答案:

答案 0 :(得分:1)

不清楚你想要得到什么,这个awk单线程产生以下输出:

awk -F',' -v q="'" '{printf "INSERT INTO EMP VALUES(%s,%s%s%s,%s);\n",$1,q,$2,q,$3;}' file                                                                             

输出

INSERT INTO EMP VALUES(Name,'Male',B.Tech);
INSERT INTO EMP VALUES(Name1,'Male',BE);
INSERT INTO EMP VALUES(Name2,'Female',BE);

答案 1 :(得分:0)

目前尚不清楚如何决定引用哪些字段以及哪些字段没有,或者您如何决定要打印哪些字段,但这里是一个引用所有输出字段并假设您不想输出最后一个字段的解决方案在每一行:

$ cat tst.awk
BEGIN{ FS="," }
{
    printf "INSERT INTO EMP VALUES( "
    for (i=1;i<NF;i++) {
        printf "%s'%s'", (i>1?", ":""), $i
    }
    print " );"
}
$ 
$ awk -f tst.awk file
INSERT INTO EMP VALUES( 'Name', 'Male', 'B.Tech' );
INSERT INTO EMP VALUES( 'Name1', 'Male', 'BE' );
INSERT INTO EMP VALUES( 'Name2', 'Female', 'BE' );

如果这不是你想要的,你无法弄清楚如何使它适应你想要的,编辑你的问题,以提供更好的解释和预期的输出,以配合你的样本输入。