我有一个看起来像这样的染色体文件:
JH739887 1 30495534
JH739888 1 29527584
JH739889 1 22321128
JH739890 1 19792264
JH739891 1 19033121
JH739892 1 17022292
[...]
Run Code Online (Sandbox Code Playgroud)
可以像这样生成一个测试文件:
cd ~/Desktop/
printf "JH%06d \t 1 \t 100 \n" {1..27239} > test_lotsoflines.txt
Run Code Online (Sandbox Code Playgroud)
它有 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
Run Code Online (Sandbox Code Playgroud)
但是现在,我想从第 2725 行增加到 5448,直到到达文件末尾(27239 行)并输出到一个新文件中output##.txt。
output01.txt 2724 lines
output02.txt 2724 lines
[...]
output10.txt 2723 lines
Run Code Online (Sandbox Code Playgroud)
我正在考虑使用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 ))"
}
Run Code Online (Sandbox Code Playgroud)
但是我需要将文件名和扩展名分开......
我在 Mac 上:macOS Mojave 10.14.6。
这种事情正是 GNU Coreutilssplit函数的设计目的
前任。拆分file为 10 块而不拆分带有前缀output、后缀.txt和递增数字的行
split -d -n l/10 --additional-suffix='.txt' file output
Run Code Online (Sandbox Code Playgroud)