【问题标题】:split larger file into smaller files: help regarding 'split'将较大的文件拆分为较小的文件:有关“拆分”的帮助
【发布时间】:2012-06-06 18:16:13
【问题描述】:

我有一个大文件(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。 有没有办法拆分这个较大的文件并根据我的需要命名文件? 实现此目的的拆分功能是什么?

【问题讨论】:

    标签: shell awk split gawk


    【解决方案1】:

    有了gawk,你可以做到-

    gawk -v RS='>' 'NF{ print RS$0 > $1".txt" }' InputFile
    

    【讨论】:

      【解决方案2】:

      使用 awk 脚本分割 mybigfile 怎么样

      splitter.awk

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

      如果要在输出中使用分隔符行,请使用以下内容:

      splitter.awk

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

      然后运行这个文件

      awk -f splitter.awk mybigfile
      

      【讨论】:

      • 嗨。这行得通。虽然,我还有一个问题,那就是:生成的文件的内容不是以 >10GS_A 或 >11BA_A 开头,正如我希望的那样。这可以在这个拆分器脚本中实现吗?
      • 根据您的需要编辑答案并添加代码。还根据解决方案添加了更多标签。
      • 这个可以适应一定行数后分割吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 2020-03-22
      • 2013-07-31
      • 1970-01-01
      相关资源
      最近更新 更多