我有一个包含数字列表的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
我得到以下表格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秒,剩余值的收益直到结束文件。
非常感谢您的帮助。
谢谢
答案 0 :(得分:0)
在一个SQL命令中执行:
DELETE FROM TABLE1 WHERE ID in (`cat file2.cvs | tr '\n' ','` -1)
最后的-1是为了迎合尾随的逗号。如果您的输入文件在最后一行没有换行符,则不需要-1
。
答案 1 :(得分:-1)
每100次删除后,您可以保留现有的文件结构,而不是在每100次删除后休眠1秒,而不是在每次删除后休眠0.01秒,以实现基本相同的事情。
这样的事情:
for i in `cat file2.cvs`
do
mysql -e "DELETE FROM TABLE1 WHERE ID = ${i};"
sleep .01
done
答案 2 :(得分:-1)
只需使用辅助变量来计算循环次数。
j=0
for i in `cat file2.cvs`
do
if [ $j -eq 100 ]
then
sleep 1
j=0
fi
j=$[ j+1 ]
done