如何编辑300 GB的文本文件(基因组数据)?

我有一个300 GB的文本文件,其中包含超过25万条logging的基因组数据。 有一些logging数据不好,我们的基因组程序“Popoolution”允许我们用星号注释掉“坏”logging。 我们的问题是,我们找不到一个文本编辑器来加载数据,以便我们可以注释掉不良logging。 有什么build议么? 我们有Windows和Linux的盒子。

更新:更多信息

Popoolution( https://code.google.com/p/popoolation/ )程序在达到“坏”logging时崩溃,并给出我们可以注释的行号。 具体来说,我们从Perl那里得到一个消息:“F#€%&Scaffolding”。 手册build议我们可以用星号来表示不好的一行。 可悲的是,我们将不得不多次重复这个过程。

还有一个想法…是否有一种方法可以让我们在不打开整个文本文件的情况下将星号添加到行中。 这可能是非常有用的,因为我们将不得不重复这个过程未知的次数。

Solutions Collecting From Web of "如何编辑300 GB的文本文件(基因组数据)?"

根据您的更新:

还有一个想法…是否有一种方法可以让我们在不打开整个文本文件的情况下将星号添加到行中。 这可能是非常有用的,因为我们将不得不重复这个过程未知的次数。

在这里你有一个办法:如果你知道行号,你可以在该行的开头添加一个星号:

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

如果您被要求让某人用文本编辑器手动标记这些记录,无论出于何种原因,您应该使用split将文件拆分成可管理的部分。

 split -a4 -d -l100000 hugefile.txt part. 

这将把文件分割成100000行。 这些文件的名称将是part.0000,part.0001等。然后,在所有的文件被编辑后,你可以把它们与cat

 cat part.* > new_hugefile.txt 

最简单的解决方案是使用一个面向流的编辑器,如sed 。 所有你需要的是能够写一个或多个正则表达式来识别所有(而且只是)坏记录。 由于您没有提供任何关于如何识别不良记录的细节,这是唯一可能的答案。

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(从长远来看肯定是合适的工具)需要安装额外的软件,并加速sed。