- 時間:2018-11-13 整理:byzqy
需求:
最近幫朋友寫了一段腳本,他的需求是根據一份產品清單,去服務器上撈取對應產品編號的測試Log,數量大概有9000~10000條左右。文本內容大致如下,數據有4列,分別表示:產品編號、員工編號、測試日期、質量等級。需要篩選出質量等級為“1”的產品的測試數據,數據存儲在以各自員工編號命名的不同測試日期的文件夾下。log文件名中包含完整產品編號。
文件:adc.txt
1 S0001L0001;TALLYMAN01;20180101;1 2 S0001L0002;TALLYMAN01;20180102;0 3 S0001L0003;TALLYMAN01;20180103;1 4 S0001L0004;TALLYMAN01;20180104;0 5 S0001L0005;TALLYMAN01;20180105;1 6 S0002L0006;TALLYMAN02;20180106;0 7 S0002L0007;TALLYMAN02;20180107;1 8 S0002L0008;TALLYMAN02;20180108;0 9 S0002L0009;TALLYMAN02;20180109;1 10 S00020L010;TALLYMAN02;20180110;0
解決:
1、使用循環逐行讀取文本文件;
2、然后再將每一行的文本按照分號(;)進行分割,得到4個參數,分別用來代表拿到的產品編號、員工編號、測試日期、質量等級;
3、根據實際情況設定log存放的目錄,並代入我們獲取到的參數,必要時可使用通配符。執行查找並復制文件。
腳本:catch_log.sh
1 #!/bin/bash 2 3 FILENAME=abc.txt 4 5 function While_read_LINE(){ 6 #讀取行內容 7 cat $FILENAME | while read LINE 8 do 9 echo "$LINE" 10 11 #拆分字符串到數組 12 str=$LINE 13 OLD_IFS="$IFS" 14 IFS=";" 15 arr=($str) 16 IFS="$OLD_IFS" 17 18 #遍歷回顯數組 19 #for s in ${arr[@]} 20 #do 21 #echo "$s" 22 #done 23 24 #為自定義變量賦值 25 PARAM_1=${arr[0]} 26 PARAM_2=${arr[1]} 27 PARAM_3=${arr[2]} 28 PARAM_4=${arr[3]} 29 30 #根據條件執行查找並拷貝 31 if [ "$PARAM_4"x = "1"x ]; then 32 #設定篩選條件 33 SERVER_ADDRESS=/mnt/server/ProductTest/$PARAM_2/FAIL/$PARAM_3/ 34 LOCAL_ADDRESS=/home/user/Desktop/result/ 35 TARGET_FILE_NAME=$(PARAM_1)_*.txt 36 #執行拷貝 37 cp $(find "$SERVER_ADDRESS" -name "$TARGET_FILE_NAME") $LOCAL_ADDRESS 38 fi 39 40 done 41 } 42 43 While_read_LINE
備注:
1、在Ubuntu16.04上執行該bash文件時,記得要對catch_log.sh添加可執行權限;
2、將abc.txt和bash文件放在同一目錄下,否則abc.txt不會被找到;
3、需要在Desktop上手動創建result文件夾,否則cp文件時找不到路徑會報錯;
4、使用方法是打開終端(Terminal),然后將catch_log.sh拖進去,然后按下回車鍵執行。
--the end--