大容量ファイルを一意のファイル名を持つ新しいファイルに分割する

大容量ファイルを一意のファイル名を持つ新しいファイルに分割する

ファイルを一意のファイル名に分割する必要があります。たとえば、コマンドを使用してこれを行うこと
ができますが、時間がかかるため、迅速に実行できる賢明な方法が必要です。以下は入力例です(元のファイルには百万行があります)。sedsed -n '/scaffold135_/w 135-scaf.txt' input file.txt

scaffold1_115,T,N,N,N,N,A,N,N,N,N,N,N,T,N,T,T,N,A,A,N,N,A
scaffold1_123,A,N,N,N,N,G,N,N,N,N,N,N,A,N,A,A,N,G,G,N,N,G
scaffold1_140,C,N,N,N,N,C,N,N,N,N,N,N,C,N,C,C,N,T,C,N,N,C
scaffold2_161,G,N,N,N,N,G,N,C,N,N,C,N,G,N,G,G,N,G,G,C,N,G
scaffold2_162,C,N,N,N,N,C,N,T,N,N,T,N,C,N,C,C,N,C,C,T,N,C
scaffold2_180,C,N,N,N,N,C,N,T,N,N,C,C,C,T,C,C,T,C,C,C,N,C
scaffold2_194,C,N,N,C,N,C,C,C,C,C,C,C,C,C,T,C,C,C,C,C,N,C
scaffold3_195,G,N,N,G,G,C,G,G,G,G,G,G,C,G,C,G,G,C,C,G,N,C
scaffold3_234,T,N,A,T,A,A,T,T,T,A,T,A,A,T,A,A,T,A,A,T,N,A
scaffold101_282,C,T,T,T,C,C,T,C,T,C,C,C,C,T,C,C,T,C,C,C,N,C
scaffold101_371,T,T,T,T,T,C,T,T,T,T,T,T,T,T,T,T,T,T,T,T,N,C
scaffold101_372,T,T,T,T,C,C,T,T,T,T,T,T,T,T,T,T,T,T,T,T,N,C

ラインがユニークです。各特定の行をscafold別々のファイルに入れたいです。たとえば、scaffold1_名前付きファイルで始まるすべての行は、次のものが含まれるscaffold1.txtまで続きます。scaffold10156.txtscaffold10156_

答え1

あなたは利用可能でなければなりませんリダイレクトそしてawk

awk -F'_' '{print > $1".txt"}' file

プレフィックスを共有する行が連続しているscaffoldn_場合は、開かれたファイルハンドルの制限に違反しないように、次のことができます。

awk -F'_' 'NR == 1 || $1 != prev{if (f) close(f);f=$1".txt"; prev=$1}; 
{print > f};END{if (f) close(f)}' file

答え2

~のためGNU sed:

sed 's/scaffold\([0-9]*\)_.*/echo "&" >> "\1-scaf.txt"/e' infile

関連情報