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

时间:2013-06-03 15:45:57

标签: linux r text edit genetics

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

更新:更多信息

程序Popoolution(https://code.google.com/p/popoolation/)在达到“坏”记录时崩溃,向我们提供我们可以注释掉的行号。具体来说,我们从Perl收到一条消息“F#€& Scaffolding”。手册建议我们可以使用星号来注释坏线。可悲的是,我们将不得不多次重复这个过程......

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

4 个答案:

答案 0 :(得分:11)

根据您的更新:

  

还有一个想法......是否有一种方法可以让我们添加   线条的星号,而不是一次打开整个文本文件。   鉴于我们将不得不重复这一点,这可能非常有用   处理未知的次数。

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

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

答案 1 :(得分:6)

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

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

这会将文件拆分为每个包含100000行的文件。文件的名称将是part.0000,part.0001等。然后,在编辑完所有文件后,您可以将它们与cat重新组合在一起:

cat part.* > new_hugefile.txt

答案 2 :(得分:4)

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

答案 3 :(得分:4)

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的速度。