之前工作的需要,利用程式跑資料的組合,即在一個資料表內將所有的ID撈出,並組合成
pairs,再將它寫入到檔案內,到時再一次匯入其他資料表。而由於資料量有點多,因此就
寫了支script程式來察看檔案內目前已經有多少的ID已處理了,瞭解一下執行的進度。
檔案資料格式如下:
ID001\tID002
ID001\tID003
ID001\tID004
此pairs會以\t做區隔,以上面的例子來看此時已有四個unique ID了
程式碼如下:
首先,定義一個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
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
留言
張貼留言