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

如何用命令对fasta格式的序列按长短排序,第1张

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

最近碰尘激岩到一个需求,比较两个fasta文件的所有序列是否一样,但是其名字无所谓是否相同,于是想了一个比较简单的办法,shell下面直接可以完成。比如有A.fasta和B.fasta两个铅信文件:

1.首先把两派御个文件进行排序,用sort。

2.然后用grep把fasta的header去掉。

3.最后比较两个处理过的文件的md5。

bam文件在进行后续分析前,需要进行排序,samtools的安装见文章:

sam文件转换为bam文件——SAMtools - (jianshu.com)

默认是按序物誉列在fasta文件中的顺序(即header)和序列从左往右的位点排序。

-@8:8个线程

-o:输出文件

按read name排序:

这里发现,原始的.bam文件,和.sort.bam以及.name.sort.bam文件的大小不一致,并且.sort.bam小很多,检查三个文件的行数:

行数一致弯册,没有问题。常用罩闹段的是默认排序,即按染色体顺序进行排序。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12226023.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存