将逗号分隔的数据插入Cassandra

时间:2016-05-16 18:32:04

标签: bash sed cassandra

我想要逐行将列数据从文件复制到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

因此,对于我希望从最后一列的文件中复制的前四个值,我按照我的要求传递了哈希值。

上面的sed语句没有用。请建议

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分:2)

在您现有的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"

第一个表达式小心地删除了逗号;

表示第二个表达式尝试匹配已删除的逗号 - 并且失败了。奇怪的是。

除了一些整理之外,这段代码完成了这项工作,基本上是你的中间s///操作,没有两个外部s///语句:

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

这很长,但它对我有用,产生:

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