1

次のような大きなファイル(2GB)があります。

  >10GS_A
  YTVVYFPVRGRCAALRMLLADQGQSWKEEVVTVETWQEGSLKASCLYGQLPKFQDGD
  LTLYQSNTILRHLGRTLGLYGKDQQEAALVDMVNDGVEDLRCKYISLIYTNYEAGKD
  DYVKALPGQLKPFETLLSQNQGGKTFIVGDQISFADYNLLDLLLIHEVLAPGCLDAFP
  LLSAYVGRLSARPKLKAFLASPEYVNLPINGNGKQ 
  >11BA_A
  KESAAAKFERQHMDSGNSPSSSSNYCNLMMCCRKMTQGKCKPVNTFVHESLADVKAV
  CSQKKVTCKNGQTNCYQSKSTMRITDCRETGSSKYPNCAYKTTQVEKHIIVACGGKP
  SVPVHFDASV
  >11BG_A
  KESAAKFERQHMDSGNSPSSSSNYCNLMMCCRKMTQGKCKPVNTFVHESLADVKAVCSQKKVT
  CKNGQTNCYQSKSTMRITDCRETGSSKYPNCAYKTTQVEKHIIVACGGKPSVPVHFDASV
  >121P_A
  MTEYKLVVVGAGGVGKSALTIQLIQNHFVDEYDPTIEDSYRKQVVIDGETCLLDILDTAGQEEYSAMRD 
  QYMRTGEGFLCVFAINNTKSFEDIHQYREQIKRVKDSDDVPMVLVGNKCDLAARTVESRQAQDLARSYG
  IPYIETSAKTRQGVEDAFYTLVREIRQH

このファイルを区切り記号 ">" に基づいて小さなファイルに分割したかったので、この場合、次のテキストを含み、次の方法で名前が付けられた 4 つのファイルが生成されます。

10gs_A.txt
11ba_A.txt
11bg_A.txt
121p_A.txt

そして、次の内容が含まれています: 10gs_A.txt

>10GS_A
YTVVYFPVRGRCAALRMLLADQGQSWKEEVVTVETWQEGSLKASCLYGQLPKFQDGD
LTLYQSNTILRHLGRTLGLYGKDQQEAALVDMVNDGVEDLRCKYISLIYTNYEAGKD
DYVKALPGQLKPFETLLSQNQGGKTFIVGDQISFADYNLLDLLLIHEVLAPGCLDAFP
LLSAYVGRLSARPKLKAFLASPEYVNLPINGNGKQ

11ba_A.txt

>11BA_A
KESAAAKFERQHMDSGNSPSSSSNYCNLMMCCRKMTQGKCKPVNTFVHESLADVKAV
CSQKKVTCKNGQTNCYQSKSTMRITDCRETGSSKYPNCAYKTTQVEKHIIVACGGKP
SVPVHFDASV

... 等々。Linux で split コマンドを使用して大きなテキスト ファイルを分割することは承知していますが、作成されたファイルには temp00、temp01、temp03 という名前が付けられます。この大きなファイルを分割し、ファイルに好きな名前を付ける方法はありますか? これを達成するための分割機能は何ですか?

4

2 に答える 2

1

awk スクリプトを使用して mybigfile を分割するのはどうですか

スプリッター.awk

BEGIN {outname = "noname.txt"}

/^>/  { outname = substr($0,2,40) ".txt"
        next }

      { print > outname }

出力に区切り行が必要な場合は、次を使用します。

スプリッター.awk

BEGIN {outname = "noname.txt"}

/^>/  { outname = substr($0,2,40) ".txt"}

      { print > outname }

次に、このファイルを実行します

awk -f splitter.awk mybigfile
于 2012-06-01T14:07:21.767 に答える
1

あなたgawkができること -

gawk -v RS='>' 'NF{ print RS$0 > $1".txt" }' InputFile
于 2012-06-02T06:33:05.473 に答える