查找字符索引的文件偏移量,忽略换行符

Find the file offset for a character index, ignoring newline

我有一个 3GB 大小的文本文件(一个带有 DNA 序列的 FASTA 文件)。它包含大约 5000 万行不同的 长度,尽管大多数行都是 70 个字符宽。给定两个字符索引,我想从此文件中提取一个字符串。艰难的 部分是,换行符不应算作字符。

为了提高速度,我想使用 seek() 到达字符串的开头并开始读取,但为此我需要以字节为单位的偏移量。

我目前的方法是写一个新文件,删除所有换行符,但这又占用了 3GB 的磁盘空间。我想找到一个需要更少磁盘的解决方案 space.

使用字典将每个字符数映射到文件偏移量也不可行,因为每个字节都有一个键,因此至少使用 16bytes*30 亿字符 = 48GB。

我想我需要一个数据结构,它允许检索某个索引字符之前的换行符的数量,然后我可以将它们的数量和字符索引相加以获得以字节为单位的文件偏移量。

SamTools fai 索引正是为此目的而设计的。这使得一个非常小的紧凑索引文件具有足够的信息,只要文件格式正确,就可以快速查找 fasta 文件中的任何点以获取内部的任何记录

您可以使用 samtools faidx 命令创建 SamTools 索引。

然后您可以使用 SamTools 包中的其他程序使用索引非常快速地提取子序列或比对。

请参阅 http://www.htslib.org/doc/samtools.html 了解用法。