Linux - 特定の文字と繰り返し数に基づいて大容量ファイルを小さなファイルに分割する

Linux - 特定の文字と繰り返し数に基づいて大容量ファイルを小さなファイルに分割する

次のような非常に大きなファイルがあります。

>name1
ACGTACGTACGT
ACGTACGTACGT
ACGTACGTACGT
ACGTACGTACGT
>name2
ACGTACGTACGT
ACGTACGTACGT
ACGTACGTACGT
>name
ACGTACGTACGT
ACGTACGTACGT
ACGTACGTACGT
ACGTACGTACGT
ACGTACGTACGT
ACGTACGTACGT
ACGTACGTACGT
ACGTACGTACGT
>name4
ACGTACGTACGT
ACGTACGTACGT
ACGTACGTACGT
ACGTACGTACGT
ACGTACGTACGT

これはfastaファイルです。 (3183名)で始まり、約3183行があり、>その後に任意の数のACGT行が続きます。>250秒後にACGT行数を追加する小さなファイルに分割したいと思います。最後のファイルの長さが250秒でなくても構いません>。私はまだそれを守りたいです。これまで分割しようとしましたが、ファイルを>各小さなファイルの1つに分割するので、ここでは適切ではないと思います。私もawkを試しました:

awk -F'>' 'NR==1{f=0;c=1}NR>1{
c++
if($((c%250))==0) {
fn="file"c".fasta";
print > fn}
}' kmer_subtraction/kmercollection.fasta

私のファイルを見ることができないので、これがうまくいくかどうかわかりません。この問題を解決するのに役立ちますか?ありがとうございます!

ベストアンサー1

awkを使用してください。

awk '
    />/ { if ( (++c % 250) == 1 ) { close(fn); fn="file"(++n)".fasta" } }
    { print > fn }
' file.fasta

おすすめ記事