Shell Script - Parse log content to get unique string

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

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

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

檔案資料格式如下:

ID001\tID002
ID001\tID003
ID001\tID004

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

程式碼如下:
  1. grep_string() {
  2.    pass_arr_str=$1[@]
  3.    union_str=("${!pass_arr_str}")
  4.    i=$3
  5.    echo $i
  6.    for s in `grep -E 'ID|IDs' result_log | cut -d ' ' -f $2` ; do
  7.       union_str[$i]="$s"
  8.       i=$(( $i + 1 ))
  9.    done
  10. }
  11. union_str=("")
  12. i=0
  13. grep_string union_str 1 $i
  14. grep_string union_str 2 $i
  15. UNIQUE_ARR=($(printf "%s\n" "${union_str[@]}" | sort -u))
  16. 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

留言