红联Linux门户
Linux帮助

求助:如何用命令对fasta格式的序列按长短排序

发布时间:2009-05-18 14:09:35来源:红联作者:huangqp
哪位知道如何用命令对fasta格式的文本内容按每条序列的长短排序,格式如下,
>werse
ACGTGCTACGTAGCTACGTAGTACTAGCTAGCT
>fdsfkj
ACGBNDJKAHDAHDCJBJCHJSHC
>swde
SDASIDJIASHCNDCHSDUHCUHDCUDNSUCVBDSUHVUD
.......
想按照每条序列的长短排序,哪位能帮助,十分感谢!!!
文章评论

共有 9 条评论

  1. xht0529 于 2009-06-02 18:17:33发表:

    学到不少东西

  2. huangqp 于 2009-05-23 13:00:20发表:

    8# wang7131984


    恩 十分感谢
    我用了第二种方法 先生成一个中间文件 然后达到结果
    seqinfo file -only name -length >list
    sort -k2 list |awk '{print $1;}'>domainid
    最后由domainid提出想要结果

  3. wang7131984 于 2009-05-20 15:05:28发表:

    提供一种解法吧,就是把文本的格式改改
    比如
    >xxxx
    yyyyyyyyyyyy
    你就把它变成
    char_num#>xxxxx#yyyyyyyyyyyyyyyyyy
    然后你就可以排序.
    最后将它还原为原来的格式
    以下是使用ruby的实现
    file = File.open "fasta"
    list = []
    loop do
    key = file.gets
    value = file.gets
    break if value == nil
    line = value.size.to_s << "#" << key << "#" << value
    #这里你自己没说清楚,到底序列是指
    #>xxxxxx
    #yyyyyyyyyyyyy还是指
    #yyyyyyyyyyyyyy,所以自己修改,我默认为下一种
    list.push line
    end
    list.sort! #恩,这里有些问题,国内的ruby少的可怜。而我又没有ruby的帮助文档。这里需要修改一下sort的这个算法。因为ruby默认是按照ascii顺序排列的。所以5反而在10的后面。还有另一种方法是使用linux的sort工具 sort -n 可以实现按数字排序,但是中间要生成临时文件,自己实现。
    tmpfile =File.open "fasta.tmp", "w"
    list.each { |elem| tmp_list = elem.splist ( /#/ ); tmpfile.puts tmp_list[1], tmp_list[2]}
    #system "mv fasta.tmp fasta"这句等你确认算法是对的再来执行吧

  4. huangqp 于 2009-05-20 13:34:20发表:

    6# plzzl

    十分感谢 是的
    不过我的序列就一行

  5. plzzl 于 2009-05-20 11:28:31发表:

    楼主搞生物学的阿?每个序列不止一行吧,一行的话好像比较容易,我在查查:0wl;l1

  6. huangqp 于 2009-05-19 19:08:38发表:

    求了 来个懂的吧

  7. xht0529 于 2009-05-19 14:59:22发表:

    不懂

  8. huangqp 于 2009-05-19 00:37:14发表:

    {:2_91:}还是没人回应

  9. opius 于 2009-05-18 15:22:17发表:

    不懂做