linux系统fasta程序,求助:如何用命令对fasta格式的序列按长短排序

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"这句等你确认算法是对的再来执行吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值