首页 > 数据库 > Oracle > 海量数据迁移之分区并行切分
par_file_name=$1
sort -rn -k3 $par_file_name > ${par_file_name}_tmp
mv ${par_file_name}_tmp ${par_file_name}
par_no=$2
obj_length=`cat ${par_file_name}|wc -l `
echo $obj_length
for i in {1..$par_no}
do
sed -n ''$i'p' ${par_file_name}> par${i}_${par_file_name}
export par${i}_sum=`cat par${i}_${par_file_name}|awk '{print $3}' | awk '{sum+=$1}END{print sum}'`
#echo `eval echo }`
done
function getMin
{
param_no=$#
for i in {1..$param_no}
do
export par${i}_=`eval echo }}`
done
min_sum=$par1_
min_par=par1_
for i in {2..$param_no};
do
j=`expr $i - 1`
tmp_cur_par=par${i}_
tmp_cur_sum=`eval echo \\${${tmp_cur_par}}`
if [ $min_sum -le $tmp_cur_sum ]
then
min_sum=$min_sum
min_par=$min_par
else
min_sum=$tmp_cur_sum
min_par=$tmp_cur_par
fi
done
echo $min_par
}
function getSumList
{
for k in {1..$par_no}
do
#export par${k}_sum=`cat par${k}_${par_file_name}|awk '{print $3}' | awk '{sum+=$1}END{print sum}'`
#echo `eval echo }`
#par_list="$par_list `eval echo }`"
#echo $par_list
tmp_sum=`cat par${k}_${par_file_name}|awk '{print $3}' | awk '{sum+=$1}END{print sum}'`
echo $tmp_sum
#tmp_par_list=${tmp_par_list} "" $tmp_sum
done
#echo $tmp_par_list
}
j=`expr $par_no + 1`
for i in {$j..${obj_length}}
do
tmp_obj=`sed -n ''$i'p' ${par_file_name}`
par_list=`getSumList`
tmp_par=`getMin $par_list`
echo 'move '`sed -n ''$i'p' ${par_file_name}|awk '{print $1 " " $2}'` ' to '$tmp_par
echo $tmp_obj >> ${tmp_par}${par_file_name}
tmp_par=0
done
for i in {1..$par_no}
do
cat par${i}_${par_file_name}|awk '{print $3}' | awk '{sum+=$1}END{print sum}'
done
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29900508/viewspace-1275881/ ,如需转载,请注明出处,否则将追究法律责任。