任务驱动,有目标性的去研究,学习
最近两周都在搞一个工具的调研,其实这个工具系统已经运行了蛮长时间,一直处于维护和新需求添加阶段,因此也经常出现一些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
其实,我写这篇文章也是为了记录自己的一些思想观念的转变。任务再复杂,再困难,我们可以进行一步步分解,有目的性去查找资料,寻求帮助,结合自己的大胆的想法和不断的尝试,最终的结果可想而知啦。任务驱动学习,带着问题去学习,不盲目,不盲从,静心思考,不断尝试,追求完美。