有時候我們需要兩個文件來記錄已執行過和待執行的記錄,這個時候我們需要找到已執行文件中具有某種特徵的行,以此來確定下一個執行任務,比如:
已執行記錄文件executed_records.txt文件內容
待執行記錄文件execute_records.txt文件內容
當匹配到的待執行任務m大於匹配到的已執行任務n時,即m>n時,執行下一個待執行任務,下一個待執行任務就是待執行任務中匹配到的第n+1條記錄。下面測試以execute_records.txt文件爲例。
1. 打印匹配內容
sed -n -e '/Server-01/p' execute_records.txt
2. 打印匹配內容行號
sed -n -e '/Server-01/=' execute_records.txt
3. 打印出匹配的行號與內容
sed -n ' /Server-01/{= ; p} ' execute_records.txt
4. 打印出匹配結果中的2-4行
sed -n '/Server-01/p' execute_records.txt |sed -n 2,4p
5. 將文件中2到4行中匹配的數據顯示出來
sed -n '/Server-01/{2,4p}' execute_records.txt
6. 打印匹配行總數
方式一:(不推薦)將輸出結果存爲數組,數組長度就是匹配行總數。
array=(`sed -n -e '/Server-01/=' executed_records.txt`)
echo ${#array[@]}
這裏的6其實就是Server-01這臺機器待執行任務記錄爲6,已執行記錄同樣可以通過查詢得到,查詢結果爲4。
這個時候6>4,下一任務就是匹配內容的第五條。利用第3中提到的命令sed -n '/Server-01/p' execute_records.txt |sed -n 4p
找到第五條待執行任務的記錄,截取任務文件名20200101.db.000005.sql,將該文件內容寫入數據庫,並記錄該任務到已執行記錄文件中。
方式二:(推薦)用find結果wc -l來統計匹配的行數。
find execute_records.txt -type f -exec grep -H "Server-01" {} \; | wc -l
-type f 表示搜索的是文件 (-type d 則是目錄,具體man find)
-exec <cmd> <args> {} \; 表示對找到的每一個文件名執行 <cmd> <args> ,
注意 {} 會被find替換成找到的文件名, \; 是必須的,用來標記 -exec 的終結
grep -H <Pattern> <FILE>
在 <FILE> 中搜索 <Pattern>, -H 表示在每一個匹配行前打印出文件名
wc -l <FILE>
統計 <FILE> 中的行數
參考:https://zhidao.baidu.com/question/35794423.html