簡體   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