我有一个3GB大小的文本文件(带有DNA序列的FASTA文件)。它包含大约5000万行不同 长度,虽然大多数行是70个字符宽。我想从这个文件中提取一个字符串,给出两个字符索引。困难 部分是,新行不应算作字符。
为了获得良好的速度,我想使用seek()
到达字符串的开头并开始读取,但我需要以字节为单位的偏移量。
我目前的做法是编写一个新文件,删除所有换行符,但磁盘上又需要3GB。我想找到一个需要更少磁盘空间的解决方案。
使用将每个字符计数映射到文件偏移量的字典也不可行,因为每个字节都有一个密钥,因此使用至少16bytes * 30亿个字符= 48GB。
我认为我需要一个数据结构,它允许检索在某个索引字符之前出现的换行符数,然后我可以添加它们的数字和字符索引来获取文件偏移量(以字节为单位)。
答案 0 :(得分:1)
SamTools fai
索引就是为此而设计的。这使得一个非常小的紧凑索引文件具有足够的信息,只要文件格式正确,就可以快速搜索fasta文件中任何记录内的任何记录
您可以使用samtools faidx
命令创建SamTools索引。
然后,您可以使用SamTools包中的其他程序使用索引非常快速地提取子序列或对齐。
请参阅http://www.htslib.org/doc/samtools.html了解使用情况。