5

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

更新:更多信息

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

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

4

4 回答 4

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.

于 2013-06-03T16:20:39.037 回答
6

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

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

这会将文件分成几部分,每部分有 100000 行。文件的名称将是 part.0000、part.0001 等。然后,在编辑完所有文件后,您可以将它们重新组合在一起cat

cat part.* > new_hugefile.txt
于 2013-06-03T16:10:42.057 回答
4

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

于 2013-06-03T15:50:57.563 回答
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(从长远来看绝对是合适的工具)将需要安装额外的软件并熟悉 sed。

于 2013-06-03T17:00:51.840 回答