2016-05-16 49 views
0

我正在将列数据从文件复制到db列逐行。将逗号分隔的数据插入到卡桑德拉

myFile-

'LB333','HK8','2015-05-23 16:20:00+0000','' 

所以执行插入操作我写了下面的sed陈述书

 sed "s/' *, *'/' '/g;s/\(.*\),\(.*\),\(.*\),\(.*\)/INSERT INTO home.BOM_WHERE (prod_id, id, effective_date, revision ,type) VALUES (\1,\2,\3, \4, 'COMPONENT');s/' '/','/g" myFile 

下面的值应该在这些地方 -

\1 - 'LB333' - against column prod_id 
    \2- 'HK8' - against column id 
    \3 -'2015-05-23 16:20:00+0000' - against column effective_date 
    \4- '' - against column revision 
    \5- 'COMPONENT'- hardcodded i am inserting- against column type 

所以加了我希望从最后一栏的文件中复制出前四个值,并按照我的r值通过harcodded值equirement。

上面的sed语句没有工作。仔细

sed -e "s/' *, *'/' '/g" \ 
    -e "s/\(.*\),\(.*\),\(.*\),\(.*\)/INSERT INTO home.BOM_WHERE (prod_id, id, effective_date, revision ,type) VALUES (\1,\2,\3, \4, 'COMPONENT')" \ 
    -e "s/' '/','/g" 

第一个表达式:请建议

+1

这是使用['LOAD DATA INFILE'](http://dev.mysql.com/doc/refman/5.7/en/load-data.html)的最佳例子。请不要涉及'sed'。 – tadman

+0

@ John1024先生我更新了我的帖子 – saurav

+0

@tadman对不起,先生,我错误的标记为MySQL。这列数据插入cassandra表中 – saurav

回答

4

用一个简单的read

while IFS=',' read a b c d; do 
echo "INSERT INTO home.BOM_WHERE (prod_id, id, effective_date, revision ,type) VALUES ($a,$b,$c,$d,'COMPONENT')" 
done < file 

输出:

INSERT INTO home.BOM_WHERE (prod_id, id, effective_date, revision ,type) VALUES ('LB333','HK8','2015-05-23 16:20:00+0000', '', 'COMPONENT') 
+0

@okla我已经删除了我的答案的'sed'部分。请参阅@Jonathan Leffler的回答,以更好地评论您的sed命令。 – SLePort

2

在现有sed,你必须(实际上)删除逗号;第二个表达式试图匹配已经被删除的逗号 - 并且很奇怪地失败了。

一些

除了整理,这段代码的工作,基本上是无两个外s///声明中指s///操作:

sed -e "s/^\(.*\),\(.*\),\(.*\),\(.*\)$/INSERT INTO home.BOM_WHERE (prod_id, id, effective_date, revision, type) VALUES (\1, \2, \3, \4, 'COMPONENT')/" "[email protected]" 

这是一个长的线,但它为我工作,生产:

INSERT INTO home.BOM_WHERE (prod_id, id, effective_date, revision, type) VALUES ('LB333', 'HK8', '2015-05-23 16:20:00+0000', '', 'COMPONENT')