Shell Script - Parse log content to compare file name (String contain example)

由於利用Server跑Java來下載某網頁上的檔案,同時要檢查有哪些檔案是無法下載的,因此

寫了一支shell script來取得目前已有的檔名(檔案)來與log檔內的特定字串做比對,來分辨說

哪些編號的檔案沒下載到。

程式碼如下:

cd /home/download file/
download_str=""
for i in `ls | grep .fastq | cut -d . -f 1`
do
download_str="$download_str $i"
done
#echo $download_str
cd /home/ben
for f in `grep 'HttpRequest Start' ebi.log | cut -d : -f 2` ; do
  if [[ $download_str != *$f* ]]; then
     echo $f
  fi
done

首先,切換到檔案下載放置的目錄

接著,過濾有字串.fastq的檔案,再來擷取以dot符號為分隔,取其field為1的字串

再來將這些字串名串接在變數download_str,名稱之間以一個空格為區間

之後,切換到另一個目錄

過濾一個檔案內以"HttpRequest Start"開頭的內容(一行一行看),以冒號符號為分隔,取其field

為2的字串

最後,將download_str變數去與取得的f變數做比對,比對的方式

$download_str != *$f*

假設$download_str => "ID123 ID456 ID789", f => "ID456"

由於比對型式為*$f*,因此不單單只是看f本身,而是只要有含f的字串就會成立!

如同SQL語法的column LIKE '%in%',就表示column有含in本身或Min或MinM都會符合!

PS. 在這邊要注意,假設f = "ID45"的話也會成立,因為download_str內"ID456"也包含它

因此,要注意此案例ID的長度最好是一致的,否則會有問題!

最後,會印出不包含f字串的內容囉!

留言