分割大文件,具有任意起始索引号

分割大文件,具有任意起始索引号

我在系统上进行了大量文件操作,在一次特定的批处理作业中,我最终得到了大约 16 GB 的文件。我需要将这些数据准备成更小的块以供另一个进程使用。

我将其拆分为每个文件 10k 行,并使用数字索引填充至 5 位数字

split -a 5 -d -l 10000 large_input_file /out_path/out.

这样,我最终得到了名为
out.00000
out.00001的文件
...

问题是这种方式的索引总是从 0 开始。
有没有办法将其设置为任意的起始索引? man 没有透露任何内容...

答案1

之后对文件重新编号并不是什么大问题。

split -a 5 -d -l 10000 large_input_file /out_path/tmp.
for x in /outpath/tmp.*; do
  mv -i -- "$x" "${x%/*}/out.$(printf %05d $((10#${x##*.}+1)))";
done

请注意两个陷阱:

  • out.00000重命名为等的简单方法out.00001不起作用,因为通配符会扩展为按字典顺序排列的列表,因此第一次重命名会覆盖第二个文件。在 zsh 中,您可以使用(On)glob 限定符。在其他 shell 中,最简单的方法是更改​​名称的词干。
  • 在 shell 算术中,前导0导致数字以八进制解释。10#${…}强制以十进制解释。
  • printf %05d是一种将填充维持为 5 位数字的方法。

答案2

我认为 split 中不存在此选项。我有一个 coreutils 错误(功能请求)——http://savannah.gnu.org/bugs/?22231

相关内容