##实例代码
#!/bin/bash cat ./switchsql.txt | while read line do tmp_partition_name=`echo $line | awk -F ' ' '{print $6}'` if [[ "$tmp_partition_name" = "" ]]; then continue fi start_flag=${tmp_partition_name:0:3} date_flag=${tmp_partition_name:((${#tmp_partition_name} - 6))} echo "${start_flag}${date_flag}" >> ./table_partition_date.txt done sort ./table_partition_date.txt | uniq > ./tpd_map.txt rm ./table_partition_date.txt declare -a partition_value_map=() OUTFILE=`cat ./tpd_map.txt` while read line do #业务数据后台查询,这里只模拟 part_flag="2" partition_value="170724" if [[ "$line" =~ "PD" ]]; then partition_value="170718" part_flag="1" fi if [[ "$line" =~ "PM" ]]; then partition_value="170801" part_flag="3" fi if [[ "$line" =~ "PY" ]]; then partition_value="180717" part_flag="4" fi date_flag=${line:((${#line} - 6))} partition_value_map["${part_flag}${date_flag}"]="${partition_value}" done <<EOF $OUTFILE EOF get_partition_high_value(){ partition_name=$1 part_flag="2" if [[ "$partition_name" =~ "PD" ]]; then part_flag="1" fi if [[ "$partition_name" =~ "PM" ]]; then part_flag="3" fi if [[ "$partition_name" =~ "PY" ]]; then part_flag="4" fi date_flag=${partition_name:((${#partition_name} - 6))} match_str="${part_flag}${date_flag}" high_value="" for key in ${!partition_value_map[@]} do if [ "$match_str" = "$key" ] ; then high_value="${partition_value_map[$key]}" break; fi done echo $high_value } high_value=`get_partition_high_value "PD_IND_H_1234_170717"` echo $high_value high_value=`get_partition_high_value "PW_IND_H_1234_170717"` echo $high_value high_value=`get_partition_high_value "PM_IND_H_1234_170701"` echo $high_value
##组织数据
alter table PM4H_DB.IND_M15_44 exchange partition PD_IND_M15_44_170717 with table PM4H_DB.PW_IND_M15_44_160704; alter table PM4H_DB.IND_2D_33_1 exchange partition PW_IND_2D_33_1_170717 with table PM4H_DB.PW_IND_2D_33_1_160704; alter table PM4H_DB.IND_2H_62_12 exchange partition PM_IND_2H_62_12_170701 with table PM4H_DB.PW_IND_2H_62_12_160704; exit;
##运行结果
pm22:/netwatcher/dbbackup> sh map.sh 170718 170724 170801