特定の行数を新しいファイルに出力し、元のファイルが「空になる」まで新しい番号付きファイルを作成します。

特定の行数を新しいファイルに出力し、元のファイルが「空になる」まで新しい番号付きファイルを作成します。

次の染色体ファイルがあります。

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

関連情報