任務驅動,有目標性的去研究,學習
最近兩週都在搞一個工具的調研,其實這個工具系統已經運行了蠻長時間,一直處於維護和新需求添加階段,因此也經常出現一些bug 問題。主要考慮到性能方面的問題,於是我們就試着換一種方式去實現,看是否可行。 ESB ,多系統平臺之間的集成,想用來練練手,自己只是稍微瞭解瞭解了點,後來就被指派去研究:假設用 shell 腳本去執行我們目前系統的大部分功能,再用 java 去調用 shell 腳本,調用完成後再進行一些善後處理工作等。
Linux知識,其實自己很去年就接觸了,也就是隻能進行簡單的一些操作。這次主要是爲了解決實際的問題而重新拾起 Linux 平臺。照着原先學習的比較,很快就再本機搭建去了一個虛擬的 Linux 平臺,利用 SecureCRT 軟件使 XP 與 Linux 進行交互。由於目的性強,只有通過組合命令才能解決這複雜問題,首當其衝的就是學習 shell 腳本。腳本的編寫規範,格式等。由於自己以前也沒寫過 shell 腳本,自己就把複雜的任務儘量簡單化,步步分解,只有當前面的功能實現了,才進行繼續編寫,遇到不懂的,再找資料,測試,編寫小實現運行。其中有幾個地方比較印象深刻:有個同事是進行 Linux 平臺的項目上線,熟悉一些 Linux 命令,自己遇到幾個問題,想不出來,就去向他討教,幾個比較關鍵的地方在他的指引下一一被我解決啦。
以下是自己寫的shell 代碼,但是沒有將裏面的部分邏輯進行函數提煉(自己會優化處理和功能的完善)。
#!/bin/ksh
## 數據庫導出文件部分省略
................
orgin_file_name='dim_location_simple.csv'
dim_location_dic_name="dim_location_dic.csv"
#area_code=$1
area_code=1-4-
#area_code_index=$2
area_code_index=2
first_line=`head -n 1 $orgin_file_name`
#echo $first_line
#統計導出文件中每一行記錄的列數
file_field_num=`awk '{FS=","} END {print NF}' ${orgin_file_name}`
#echo ${file_field_num}
#統計 area_code 下屬地數量
area_code_count=`awk 'BEGIN {FS=","} ($1~/'${area_code}'/) {print NF}' ${dim_location_dic_name}`
#echo ${area_code_count}
index=1
while [ ${index} -le ${area_code_count} ]
do
#當前屬地編碼
current_area_code=`awk 'BEGIN {FS=","} ($1~/'${area_code}'/) {print $'${index}'}' ${dim_location_dic_name}`
index=$((${index}+1))
#導出的屬地清單文件名稱
output_file_name="dim_location_${current_area_code}.csv"
output_zip_file_name="dim_location_${current_area_code}.zip"
#echo ${output_file_name}
#寫入字段標題
head -n 1 $orgin_file_name | awk 'BEGIN {FS=","} { i=1; for (i =1; i<NF; i++) {if(i != '${area_code_index}') printf $i"," } print $'${file_field_num}' }' > ${output_file_name}
#導出屬地化清單文件 ( 去除 AREA_CODE 列 )
awk '{FS=","} ( $'${area_code_index}'~"'${current_area_code}'" ) { i=1; for (i =1; i<NF; i++) {if(i != '${area_code_index}') printf $i"," } print $'${file_field_num}' }' ${orgin_file_name} >> ${output_file_name}
#測試文件是否爲只有文件頭,若是則刪除
file_line_num=`wc -l ${output_file_name} | awk '{print $1}'`
##測試用 , 測試文件的行數
#file_line_num=`wc -l ${output_file_name}`
#echo ${file_line_num}
###
(test ${file_line_num} -le 1) && rm ${output_file_name}
##壓縮屬地化清單文件爲 zip 格式 , 刪除相應的 CSV 文件
if [ -e ${output_file_name} ]; then
zip ${output_zip_file_name} ${output_file_name}
#rm -f ${output_file_name}
fi
Done
其實,我寫這篇文章也是爲了記錄自己的一些思想觀念的轉變。任務再複雜,再困難,我們可以進行一步步分解,有目的性去查找資料,尋求幫助,結合自己的大膽的想法和不斷的嘗試,最終的結果可想而知啦。任務驅動學習,帶着問題去學習,不盲目,不盲從,靜心思考,不斷嘗試,追求完美。