将一定数量的行输出到一个新文件,创建一个新的编号文件,直到原始文件为“空”

将一定数量的行输出到一个新文件,创建一个新的编号文件,直到原始文件为“空”

我有一个染色体文件,如下所示:

JH739887 1 30495534
JH739888 1 29527584
JH739889 1 22321128
JH739890 1 19792264
JH739891 1 19033121
JH739892 1 17022292
[...]

可以这样生成测试文件:

cd ~/Desktop/
printf "JH%06d \t 1 \t 100 \n" {1..27239} > test_lotsoflines.txt

它有 27239 行,但我希望有 10 个文件,其中包含约 2724 行(这将使并行命令工作)。

我能够将原始文件的第 1 行到第 2724 行输出到新文件。

sed -n -e '1,2724p' ${REFGENO}/geoFor1.chrom.start.stop.sizes > ~/Desktop/output.txt
wc -l ~/Desktop/output.txt
 2724 ~/Desktop/output.txt

但现在,我想从第 2725 行增加到第 5448 行,直到到达文件末尾(27239 行)并输出到新文件中output##.txt

output01.txt 2724 lines 
output02.txt 2724 lines 
[...]
output10.txt 2723 lines

我正在考虑使用printf "output%02d.txt\n"来获取输出##.txt

但是如何增加文件的数量文件中的行数到底生成10个文件?当然,最后一个文件将有 2723 行,因为原始文件中的行数不以“0”结尾。

可以使用的一种方法是使用中提供的解决方案更新文件名如何在 bash 中增加字符串末尾的数字?:

updateVersion()
{
  [[ $1 =~ ([^0-9]*)([0-9]+) ]] || { echo 'invalid input'; exit; }     
  echo "${BASH_REMATCH[1]}$(( ${BASH_REMATCH[2]} + 1 ))"
}

但我需要将文件名和扩展名分开......

我在 Mac 上:macOS Mojave 10.14.6。

答案1

这种事情正是 GNU Coreutilssplit函数设计的目的

前任。分割file成 10 个块,而不分割带有 prefix output、 suffix.txt和递增数字的行

split -d -n l/10 --additional-suffix='.txt' file output

相关内容