首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bash如何将循环输出打印到一行?

bash如何将循环输出打印到一行?
EN

Stack Overflow用户
提问于 2012-02-29 06:11:42
回答 6查看 4.9K关注 0票数 3

我希望如果有人能帮我,

如何将for循环的输出打印到单行?

代码语言:javascript
运行
复制
for i in `cat file.csv`
do
echo $i 
done

我在这里尝试实现的是从file.csv获取一个数字列表,以生成一条mysql批量删除语句。

代码语言:javascript
运行
复制
delete FROM Recordtable WHERE DataID IN ('93041', '93031' ...etc);

这里的目标是将每1000条记录加载到一条delete语句中

非常感谢您的帮助

EN

Stack Overflow用户

发布于 2012-02-29 06:35:01

代码语言:javascript
运行
复制
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

试一试吧!

票数 1
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9490573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档