将var中定义的值尽可能均匀地划分为可变长度数组

时间:2016-07-04 15:59:11

标签: bash awk sed

我正在尝试尽可能均匀地分割余数,其中var不能被分组到数组中。

我已经尝试了以下内容,它为我提供了对数组项的四舍五入。我正在寻找一种方法来识别余数,然后将其尽可能均匀地分配到每个数组索引值中。

<style>
table {
    box-sizing:border-box;
    width:460px;
    margin:15px;
    display:block;
    border:double 7px;
    padding:10px;
    line-height:40px;
}
table tr {
    text-align:center;
}
table th {
    font-size:20px;
    width:100px;
}
table td {
    font-size:17px;
}
@media (max-width:768px) {/*Extra-Small Screens*/
table tr th:last-child,  table tr td:last-child {
    display:none;
}
table {
    width:360px;
}
}
@media (max-width:617px) {/*Extra*/
table {
    width:300px;
}
}
@media (max-width:536px) {/*Extra*/
table tr th:nth-last-child(2),  table tr td:nth-last-child(2) {
    display:none;
}
table {
    width:170px;
}
}
</style>

例1:

输入:

    for n in ${!variableLengthArray[@]} ; do

        divideCount=$(( ${variableLengthArray[$n]} / $var ))

        variableLengthArray[$n]=$(echo "($divideCount+0.5)/1" | bc )

    done

理想输出:

    var=11
    variableLengthArray[0]=0
    variableLengthArray[1]=0
    variableLengthArray[2]=0

EXAMPLE2:

输入:

    variableLengthArray[0]=4
    variableLengthArray[1]=4
    variableLengthArray[2]=3

理想输出:

    var=33
    variableLengthArray[0]=0
    variableLengthArray[1]=0
    variableLengthArray[2]=0
    variableLengthArray[3]=0
    variableLengthArray[4]=0
    variableLengthArray[5]=0

2 个答案:

答案 0 :(得分:1)

您只需要将输入分为输出槽数。 shell只进行整数除法,因此结果将是每个槽中存储的数字。除法的其余部分告诉您有多少个槽获得结果加一个

作为一个具体的例子,

$ var=11
$ slots=3
$ result=$((var / slots))
$ k=$((var % slots ))
$ for ((i=0; i<k; i++)); do
> variableLengthArray[i]=$(( result + 1 ))
> done
$ for ((i=k; i < slots; i++)); do
> variableLengthArray[i]=$result
> done

答案 1 :(得分:1)

假设您的数组变量的索引从0开始并且是连续的,则以下代码将执行您想要的操作:

n=${#variableLengthArray[@]}
ratio=$(($var / $n))
rem=$(($var % $n))
for i in ${!variableLengthArray[@]} ; do
    variableLengthArray[$i]=$(( $ratio + ($i < $rem ? 1 : 0) ))
done