Shell腳本逐行讀取文本內容並拆分,根據條件篩選文件


  • 時間: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--


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM