如何编辑 300 GB 的文本文件(基因组数据)?
Posted
技术标签:
【中文标题】如何编辑 300 GB 的文本文件(基因组数据)?【英文标题】:How to edit 300 GB text file (genomics data)? 【发布时间】:2013-05-29 20:08:05 【问题描述】:我有一个 300 GB 的文本文件,其中包含超过 25 万条记录的基因组数据。有一些记录包含不良数据,我们的基因组学程序“Popoolution”允许我们用星号注释掉“不良”记录。我们的问题是我们找不到可以加载数据的文本编辑器,以便我们可以注释掉不良记录。有什么建议?我们有 Windows 和 Linux 机器。
更新:更多信息
Popoolution (https://code.google.com/p/popoolation/) 程序在到达“坏”记录时崩溃,该记录为我们提供了行号,然后我们可以将其注释掉。具体来说,我们从 Perl 收到一条消息,上面写着“F#€%& Scaffolding”。该手册建议我们可以只使用星号来注释掉坏行。可悲的是,我们将不得不多次重复这个过程......
再想一想……有没有一种方法可以让我们在行中添加星号,而无需一次打开整个文本文件。考虑到我们将不得不重复这个过程未知的次数,这可能非常有用。
【问题讨论】:
为什么需要在文本编辑器中打开它?您肯定不会手动评论所有 250k 记录吗?看看使用 awk 或 sed。 为那些不良记录找到一个模式并使用 awk 或 sed 解决问题,正如@Joshua 所指出的那样。需要手动检查 25 万条记录意味着一生。 我们尝试在记事本++中加载文件,加载时间超过24小时,基本可以使用。 刚刚找到一个有用的话题:***.com/questions/159521/… 350,000,000,000 字节和 250,000 条记录大约是每行一兆字节。这不是文本文件的工作。获取合适的数据库。只是说。 【参考方案1】:根据您的更新:
再想一想...有没有一种方法可以让我们添加 将星号添加到行中,而无需立即打开整个文本文件。 这可能非常有用,因为我们将不得不重复 处理未知次数。
这里你有一个方法:如果你知道行号,你可以在该行的开头添加一个星号:
sed 'LINE_NUMBER s/^/*/' file
看一个例子:
$ cat file
aa
bb
cc
dd
ee
$ sed '3 s/^/*/' file
aa
bb
*cc
dd
ee
如果添加-i
,文件将被更新:
$ sed -i '3 s/^/*/' file
$ cat file
aa
bb
*cc
dd
ee
尽管我一直认为重定向到另一个文件会更好
sed '3 s/^/*/' file > new_file
这样您就可以保持原始文件的完整性,并将更新后的文件保存在new_file
。
【讨论】:
【参考方案2】:R 中的一个基本模式是分块读取数据、编辑和写出
fin = file("fin.txt", "r")
fout = file("fout.txt", "w")
while (length(txt <- readLines(fin, n=1000000)))
## txt is now 1000000 lines, add an asterix to problem lines
## bad = <create logical vector indicating bad lines here>
## txt[bad] = paste0("*", txt[bad])
writeLines(txt, fout)
close(fin); close(fout)
虽然不理想,但它适用于 Windows(通过提到 Notepad++ 暗示)和您可能熟悉的语言 (R)。使用 sed(从长远来看绝对是合适的工具)需要安装 additional software 并熟悉 sed。
【讨论】:
【参考方案3】:如果您需要有人使用文本编辑器手动标记这些记录,无论出于何种原因,您都应该使用split
将文件拆分为可管理的部分。
split -a4 -d -l100000 hugefile.txt part.
这会将文件分成几部分,每部分有 100000 行。文件名会是 part.0000、part.0001 等。然后,在所有文件都被编辑后,你可以将它们重新组合在一起 cat
:
cat part.* > new_hugefile.txt
【讨论】:
【参考方案4】:最简单的解决方案是使用面向流的编辑器,例如sed
。您所需要的只是能够编写一个或多个正则表达式来识别所有(且仅)不良记录。由于您尚未提供有关如何识别不良记录的任何详细信息,因此这是唯一可能的答案。
【讨论】:
'sed' 是否允许我们指定行号并添加星号?行号算作“正则表达式”吗?以上是关于如何编辑 300 GB 的文本文件(基因组数据)?的主要内容,如果未能解决你的问题,请参考以下文章