shell使用(1)篩選日誌內容&重新執行刪除操作
阿新 • • 發佈:2019-01-27
shell指令碼,查詢某一時間段的所有log,篩選出所有刪除成功的記錄,提取記錄中的ID,判斷ID是否刪除成功,並重新執行刪除操作。
#!/bin/sh file_base_front="indexing-2015-08-2"; file_base_mid="_"; file_base_end=".0.log"; out="./outlog/out; # 也可以直接通過(<span style="font-family: Arial, Helvetica, sans-serif;">for ofile in ./*</span><span style="font-family: Arial, Helvetica, sans-serif;">)遍歷當前目錄下所有檔案,減少定義的變數,可讀性更好。</span> for ((file_front=5;file_front<=6;file_front++)) do #082500-082519 for ((file_mid=0;file_mid<=1;file_mid++)) do for ((file_end=0;file_end<=9;file_end++)) do # 用變數組成所有待查詢的檔名,通過grep,篩選出所有“delete”的“wallpaper”記錄 <span style="font-family: Arial, Helvetica, sans-serif;">cat ${file_base_front}$file_front${file_base_mid}$file_mid$file_end${file_base_end} | grep wallpaper | grep delete_vertex > ${out}$file_front${file_base_mid}$file_mid$file_end</span> done done # 082520-082523 file_mid=2; for ((file_end=0;file_end<=3;file_end++)) do cat ${file_base_front}$file_front${file_base_mid}$file_mid$file_end${file_base_end} | grep wallpaper | grep delete_vertex > ${out}$file_front${file_base_mid}$file_mid$file_end done done # 篩選後的記錄存放在./outlog/目錄下,首先刪除所有空檔案 for ofile in ./outlog/* do [ ! -s $ofile ] && rm -f $ofile done outfile=".suc" # 在這些記錄中,選擇刪除成功的記錄,重定位到新檔案中 for ofile in ./outlog/* do cat $ofile | grep "資料成功" > $ofile$outfile done resdir="./resdir/"; findir="_find"; deletedir="_delete"; #使用字串擷取,提取記錄中的entryID for ofile in ./outlog/*.suc do cat $ofile | while read myline do str=${myline#*wallpaper/} res=${str%/*} #對每個id執行一遍查詢和delete操作,並存儲呼叫curl的結果,重定位到檔案中 curl -X DELETE http://localhost:1234/delete/$res/ > $resdir$res$deletedir curl -X POST http://localhost:1234/-d '{"id":"$res", "type":100}' > $resdir$res$findir echo $res done done