xht0529 于 2009-06-02 18:17:33发表:
学到不少东西
huangqp 于 2009-05-23 13:00:20发表:
8# wang7131984 恩 十分感谢 我用了第二种方法 先生成一个中间文件 然后达到结果 seqinfo file -only name -length >list sort -k2 list |awk '{print $1;}'>domainid 最后由domainid提出想要结果
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"这句等你确认算法是对的再来执行吧
huangqp 于 2009-05-20 13:34:20发表:
6# plzzl 十分感谢 是的 不过我的序列就一行
plzzl 于 2009-05-20 11:28:31发表:
楼主搞生物学的阿?每个序列不止一行吧,一行的话好像比较容易,我在查查:0wl;l1
huangqp 于 2009-05-19 19:08:38发表:
求了 来个懂的吧
xht0529 于 2009-05-19 14:59:22发表:
不懂
huangqp 于 2009-05-19 00:37:14发表:
{:2_91:}还是没人回应
opius 于 2009-05-18 15:22:17发表:
不懂做
xht0529 于 2009-06-02 18:17:33发表:
学到不少东西
huangqp 于 2009-05-23 13:00:20发表:
8# wang7131984
恩 十分感谢
我用了第二种方法 先生成一个中间文件 然后达到结果
seqinfo file -only name -length >list
sort -k2 list |awk '{print $1;}'>domainid
最后由domainid提出想要结果
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"这句等你确认算法是对的再来执行吧
huangqp 于 2009-05-20 13:34:20发表:
6# plzzl
十分感谢 是的
不过我的序列就一行
plzzl 于 2009-05-20 11:28:31发表:
楼主搞生物学的阿?每个序列不止一行吧,一行的话好像比较容易,我在查查:0wl;l1
huangqp 于 2009-05-19 19:08:38发表:
求了 来个懂的吧
xht0529 于 2009-05-19 14:59:22发表:
不懂
huangqp 于 2009-05-19 00:37:14发表:
{:2_91:}还是没人回应
opius 于 2009-05-18 15:22:17发表:
不懂做