我想要逐行将列数据从文件复制到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语句没有用。请建议
答案 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')