【发布时间】:2016-10-07 05:44:21
【问题描述】:
我有一个文件需要转换成mysql插入语句,格式如下:
1
'Jan'
'Jame'
'O\'Leary'
'Bill'
''
NULL
1
'Eddie'
'Eddie'
'Unknown'
NULL
NULL
'John'
NULL
'Joseph'
我正在尝试使用以下代码来准备语句:
COUNTER=1;
echo "insert into database.table values " > full_statements.sql
while read LINE
do
# There are 16 fields of information per insert statement.
MODULUS=$(( $COUNTER % 16 ))
# First piece of information needs to be in format "(value"
if [ "$COUNTER" -eq 1 ]; then
printf "("$LINE >> full_statements.sql
# Last piece of information needs to be in format ",value),"
elif [ "$MODULUS" -eq 0 ]; then
printf ","$LINE")," >> full_statements.sql
# Interior pieces of information need to be in format ",value"
else
printf ","$LINE >> full_statements.sql
fi
# If we have a complete insert statement, reset the COUNTER.
if [ "$COUNTER" -eq 16 ]; then
COUNTER=1
else
((COUNTER++))
fi
done < binfile.new
不幸的是,我的结果如下:
insert into database.table values
(1,'Jan','Jame','O'Leary','Bill','',NULL,1,'Eddie','Eddie','Unknown',NULL,NULL,'John',NULL,'Joseph');
预期输出:
insert into database.table values
(1,'Jan','Jame','O\'Leary','Bill','',NULL,1,'Eddie','Eddie','Unknown',NULL,NULL,'John',NULL,'Joseph');
我用来转义 O'Leary 名字中的引号的反斜杠不会打印出来。我正在努力将这个“\”包含在输出中,但找不到答案。
帮助! :-)
【问题讨论】:
-
试试
echo -e "insert into database.table values \n ( $(awk -vORS="," '{$1=$1}1' INPUTFILE) );" |sed 's/\(.*\),/\1/' -
另外,添加预期输出,以便其他人可以比较他们的解决方案...
-
PS,我不确定代码的位置——你能详细说明一下代码段吗?
-
正确使用
printf:printf '(%s' "$LINE"可以帮助您解决问题。
标签: linux bash awk sed escaping