【问题标题】:How to Grep & Cat text files based on an identifier line from a multi-text file如何根据多文本文件中的标识符行 Grep 和 Cat 文本文件
【发布时间】:2015-02-20 18:16:29
【问题描述】:

所有, 我正在寻找一种有效的方法来组织和过滤某些类型的文本文件。

假设我有 10,000,000 个文本文件,这些文件连接到更大的块,格式如下

@text_file_header
ID0001
some text
...
@text_file_header
ID0002
some text
...
@text_file_header
ID0003
some text
...

现在,我对这些文件执行某些操作,最终得到 200 x 10,000,000 个文本文件(块)——每个文本文件现在都有“兄弟姐妹”

@text_file_header
ID0001_1
some text
...
@text_file_header
ID0001_2
some text
...
@text_file_header
ID0001_3
some text
...
@text_file_header
ID0002_1
some text
...
@text_file_header
ID0002_2
some text
...
@text_file_header
ID0002_3
some text

但是,对于某些任务,我只需要某些文本文件,我的主要问题是如何根据文本文件中的“id”提取它们(例如,grep ID0001_* 和 ID0005_* 和 ID0006_* 等等开)。

SQLite 是一种选择,我也已经有一个带有 ID 和文件列的 SQLite 数据库,但是,问题是我需要在集群上生成 200 * 10,000,000 个文本文件时进行计算约束。 SQLite 的文件 I/O 现在限制太多了。

我现在的想法是像这样将这些文件拆分为 10,000,000 个单独的文件

gawk -v RS="@<TRIPOS>MOLECULE" 'NF{ print RS$0 > "file"++n".txt" }' all_chunk_01.txt

在我生成了这 200 个“兄弟姐妹”之后,我会做一个 cat 在基于我当前感兴趣的文件 ID 的文件夹中。假设我需要 10,000,000 个文本文件中的 10,000 个团队,我会将它们集中到一个文档中,我需要进一步处理步骤. 现在,我担心的是,将 10,000,000 个单独的文件存储在磁盘上的单个文件夹中并执行 cat 是否是一个好主意,或者最好 grep 根据 ID 输出文件,比如 100多文本文件?

【问题讨论】:

  • 高效 == 数据库。低效 = 10,000,000 个文本文件。
  • 你不需要 grep 和 cat 来获取这些块,你可以使用 awk 或 perl 之类的东西,或者正如斯塔克指出的那样,使用源数据库本身。既然您提到了文件 I/O,那么 1000 万个文件的 I/O 将远远大于数据库上的 I/O。
  • 目标是最终将它们读入数据库。我的意思是,我已经在数据库中有 10,000,000 个文本文件,但没有生成的 200 个兄弟姐妹。我所说的 I/O 是什么意思:我必须将它们读入数据库,索引数据库,过滤,然后将过滤后的目标再次写入硬盘。这最终会完成,但现在,我有点时间有限
  • 你能像stackoverflow.com/questions/23934486/… 显示的那样使用awk 吗?

标签: linux bash grep cat


【解决方案1】:

例如:

grep TextToFind FileWhereToFind

返回你想要的。

【讨论】:

  • 是的,当然,但是如何从文件中提取某些块。例如,查找例如“ID0001_1 和下一个 ID 之前的所有后续行”+“ID0123_9 和下一个 ID 之前的所有后续行”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多