2016-05-16 13 views
0

ファイルからDB列の列データを行ごとにコピーしたいと考えています。カサンドラにカンマ区切りのデータを挿入する

myFile-

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

ので、私は次の値がこれらのplaces-

ためので
\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 

で追加する必要があり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 

次書いた挿入操作を実行します最初の4つの値私は最後の列のファイルからコピーしたいと思います。等価。

上記のsedステートメントは機能しませんでした。親切にシンプルread

+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

をお勧め:

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 

出力:既存のsed

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'部分を削除しました。あなたのsedコマンドに関するより良いコメントについては、@Jonathan Lefflerの答えをご覧ください。 – SLePort

2

、あなたは(実際に)持っている:

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" 

慎重に最初の式カンマを削除します。 2番目の式は、削除されたコンマで一致しようとします。

別に片付け一部から、このコードは、仕事をして、そして二つの外側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') 
関連する問題