我有一个染色体文件,如下所示:
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