我希望如果有人能帮我,
如何将for循环的输出打印到单行?
for i in `cat file.csv`
do
echo $i
done我在这里尝试实现的是从file.csv获取一个数字列表,以生成一条mysql批量删除语句。
delete FROM Recordtable WHERE DataID IN ('93041', '93031' ...etc);这里的目标是将每1000条记录加载到一条delete语句中
非常感谢您的帮助
发布于 2012-02-29 06:35:01
BULK_DELETE_SQL=/tmp/bulkdelete.sql
rm -f ${BULK_DELETE_SQL}
COMMIT_COUNT=0
COMMIT_LIMIT=1000
NUMLIST=""
COMMA=""
for NUM in `cat file.csv`
do
NUMLIST="${NUMLIST}${COMMA}${NUM}"
COMMA=","
(( COMMIT_COUNT++ ))
if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
then
SQLSTMT="delete FROM Recordtable WHERE DataID IN (${NUMLIST});"
echo ${SQLSTMT} >> ${BULK_DELETE_SQL}
NUMLIST=""
COMMA=""
COMMIT_COUNT=0
fi
done
if [ ${COMMIT_COUNT} -gt 0 ]
then
SQLSTMT="delete FROM Recordtable WHERE DataID IN (${NUMLIST});"
echo ${SQLSTMT} >> ${BULK_DELETE_SQL}
fi
mysql -u... -p... < ${BULK_DELETE_SQL}
rm -f ${BULK_DELETE_SQL}这将编写一个SQL脚本,该脚本将为每个DELETE语句创建1000个DataID。
它将只连接到mysql一次,并执行所有删除,一次1000个DataID。
如果file.csv中有6247个DataID,那么最后一行应该有247个DataID
如果file.csv中有247个DataID,那么唯一的一行应该有247个DataID
试一试吧!
https://stackoverflow.com/questions/9490573
复制相似问题