[英]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.