无jot工具时生成包含上下限的等间隔整数序列方法
解决方法
因为seq只能使用整数步长,当(high-low)无法被n-1整除时,整数除法会截断小数部分,导致序列无法覆盖到上限值。下面提供两种无需额外安装工具的方法,均能生成包含首尾边界的整数序列:
方法1:使用awk(推荐)
awk支持浮点运算,可以准确计算每个序列值并四舍五入取整,和jot的行为完全一致:
low=10 high=100 n=8 awk -v low="$low" -v high="$high" -v n="$n" 'BEGIN{for(i=0;i<n;i++) print int(low + i*(high-low)/(n-1) + 0.5)}'
运行结果:
10 23 36 49 61 74 87 100
方法2:纯Bash结合bc
利用bc处理浮点计算,再通过printf四舍五入取整:
low=10 high=100 n=8 for ((i=0; i<n; i++)); do val=$(echo "scale=5; $low + $i*($high-$low)/($n-1)" | bc) printf "%.0f\n" "$val" done
运行结果和上述awk方法一致。
原理说明
两种方法的核心都是基于公式:第i个值 = low + i*(high-low)/(n-1)(i从0到n-1),通过浮点计算避免整数除法的精度丢失,再通过四舍五入得到整数结果,确保最后一个值恰好等于high。
内容的提问来源于stack exchange,提问作者leleogere
相关产品推荐
相关产品推荐

