次の染色体ファイルがあります。
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本の行がありますが、約2724本の行を含む10個のファイルが必要です(これを行うと、並列コマンドが機能します)。
元のファイルの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
しかし、今ファイルの終わり(27239行)に達するまで、2725行から5448行に増え、新しいファイルに出力したいと思いますoutput##.txt
。
output01.txt 2724 lines
output02.txt 2724 lines
[...]
output10.txt 2723 lines
私は次のようにprintf "output%02d.txt\n"
##。txt出力を取得するつもりです。
しかし、ファイル数を増やす方法は?そして10個のファイルを生成するには、ファイルに何行が生成されますか?もちろん、元のファイルの行数は「0」で終わらないので、最後のファイルには2723行があります。
使用できるアプローチの1つは、次のソリューションを使用してファイル名を更新することです。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個のチャンクに分割output
.txt
split -d -n l/10 --additional-suffix='.txt' file output