You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用Linux split工具将9840497字节拆分为3个不等长度并存入数组

不使用split工具拆分字节为不等长度并存入数组

Linux中的split工具可完成文件拆分操作,示例如下:

$ du -b file.mp4
9840497 file.mp4
$ split -e --number=3 --verbose file.mp4 && du -b xa*
3280165 xaa
3280165 xab
3280167 xac

但split生成的前两部分大小相同,且直接用整数除法仅能得到单个基础拆分大小:

$ parts=$((9840497 / 3))
$ echo -n "$parts"
3280165

下面介绍两种不依赖split工具,将9840497字节拆分为3个不等长度并存入数组的方法:

方法1:手动指定前两部分,计算第三部分

直接自定义两个不同的拆分长度,第三部分通过总字节数减去前两部分的和得到,确保总和一致且三个长度不等:

total=9840497
# 自定义两个不等的拆分值
part1=3280100
part2=3280200
# 计算第三部分
part3=$((total - part1 - part2))

# 将结果存入数组
split_parts=($part1 $part2 $part3)

# 验证结果
echo "拆分后的三个部分:${split_parts[@]}"
echo "总和验证:$((part1 + part2 + part3))"

执行后会得到三个不等的数值,且总和与原字节数完全一致。

方法2:基于余数的动态不等分配

如果需要更通用的逻辑,可基于基础拆分值和余数调整,生成完全不等的拆分结果:

total=9840497
num_parts=3
base=$((total / num_parts))
remainder=$((total % num_parts))

split_parts=()
# 循环生成拆分长度,通过调整让三个值不等
for ((i=0; i<num_parts; i++)); do
    if [ $i -eq 0 ]; then
        # 第一个部分比基础值少1
        split_parts+=($((base - 1)))
    elif [ $i -eq $((num_parts - 1)) ]; then
        # 最后一个部分承担余数并额外加1,确保与其他部分不等
        split_parts+=($((base + remainder + 1)))
    else
        # 中间部分用基础值
        split_parts+=($base)
    fi
done

# 验证结果
echo "拆分后的三个部分:${split_parts[@]}"
echo "总和验证:$(( ${split_parts[0]} + ${split_parts[1]} + ${split_parts[2]} ))"

该方法会生成3280164、3280165、3280168三个不等的长度,总和恰好为9840497字节。

内容的提问来源于stack exchange,提问作者Fabian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:05:27