2016-05-16 83 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')