使用 sed 按序列拆分文件。 bash

Using sed to split a file by a sequence. bash

我想将一个 211,548,559 行的文件剪切成 10 个较小的文件。因此,例如,第一个文件将包含第 1 到 21154856 行

我想编写一个带有 seq 的 for 循环,使我能够自动化该过程。

我尝试先创建一个函数,然后使用 seq 创建一个循环。

run_sed(){
    sed -n p Bar08_depth_chr1.txt > Bar8_d_c1_.txt
}
for pos in seq 1 10 211548559
do
    run_sed $pos
done

此脚本无效。我相信是因为 sed -n 1$p 中的 $1 但我不知道如何解决它

对于 GNU split:

split -nl/10 --additional-suffix=.txt -d Bar08_depth_chr1.txt Bar8_d_c1_

这将创建 10 个名为 Bar8_d_c1_00.txtBar8_d_c1_09.txt 的文件,这些文件可能不需要重命名。

对于 split 在 MacOS 下:

split -l $(( (211548559 - 9) / 10 )) Bar08_depth_chr1.txt Bar8_d_c1_

这将创建 10 个名为 Bar8_d_c1_aaBar8_d_c1_aj 的文件,可以 renamed 为您需要的名称模式。

显示的计算导致每个文件的行数四舍五入以避免第 11 个文件非常小。