繁体   English   中英

mysql脚本bash循环

[英]mysql script bash loop

我有一个包含数字列表的csv文件,

479856252|1329148400996|1329148405406|1329148412444|0|6042292534|6042292534|14016487697|0|6
479856262|1329148401487|1329148405287|1329148412444|0|6136992594|6136992594|14016487697|0|6
479856272|1329148405124|1329148405124|1329148412470|0|8883398128||4016487697|0||P|0|7
479856282|1329148114930|1329148117966|1329148412502|0|8006564132|8779918502|7657954163|2609

当我awk -F'|' '{print $1;}' file.csv > file2.csv awk -F'|' '{print $1;}' file.csv > file2.csv

我得到以下表格ID

12345
67891
32234
22345
12345

我有一个像这样的for循环

for i in `cat file2.cvs`
do 
DELETE FROM TABLE1 WHERE ID = $i
done 

但是,这给我的盒子增加了负担,我希望我可以拆分该操作(对于来自file2.csv的每100条记录)执行删除,然后将剩余值的收益休眠1秒,直到文件结尾。

非常感谢您的帮助。

谢谢

使用一个SQL命令执行此操作:

DELETE FROM TABLE1 WHERE ID in (`cat file2.cvs | tr '\n' ','` -1)

末尾的-1是为了应付结尾的逗号。 如果输入文件的最后一行没有换行符,则不需要-1

您可以保留现有的文件结构,而不必在每100次删除后休眠1秒,而在每次删除后仅休眠0.01秒,以实现基本相同的目的。

像这样:

for i in `cat file2.cvs`
do 
  mysql -e "DELETE FROM TABLE1 WHERE ID = ${i};"
  sleep .01
done 

只需使用辅助变量来计算循环数。

j=0
for i in `cat file2.cvs`
do

    if [ $j -eq 100 ]
    then
        sleep 1  
        j=0
    fi        

    j=$[ j+1 ]
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM