Shell Script - Parse log content to get unique string

之前工作的需要,利用程式跑資料的組合,即在一個資料表內將所有的ID撈出,並組合成

pairs,再將它寫入到檔案內,到時再一次匯入其他資料表。而由於資料量有點多,因此就

寫了支script程式來察看檔案內目前已經有多少的ID已處理了,瞭解一下執行的進度。

檔案資料格式如下:

ID001\tID002
ID001\tID003
ID001\tID004

此pairs會以\t做區隔,以上面的例子來看此時已有四個unique ID了

程式碼如下:
grep_string() {
   pass_arr_str=$1[@]
   union_str=("${!pass_arr_str}")
   i=$3
   echo $i
   for s in `grep -E 'ID|IDs' result_log | cut -d ' ' -f $2` ; do
      union_str[$i]="$s"
      i=$(( $i + 1 ))
   done
}
union_str=("")
i=0
grep_string union_str 1 $i
grep_string union_str 2 $i
UNIQUE_ARR=($(printf "%s\n" "${union_str[@]}" | sort -u))
echo ${#UNIQUE_ARR[@]}

程式碼主要是將ID pairs分別存進array內,再利用sort -u command將重複的資料移除

首先,定義一個union_str array

緊接著,由於要將pair的資料分別存放,因此定義了一個function grep_string

帶進參數 => union_str, 要存取的field, 處理到哪兒的array index

在function內,$1, $2, $3分別為您帶進的參數參考或值

至於grep, cut語法的部分,前一篇shell script已有說明,在此不贅述囉!

PS.

echo ${UNIQUE_ARR[@]} =>  print array content

echo ${#UNIQUE_ARR[@]} => print array length

留言