【问题标题】:How to extract and put every blocks of text into loop statement [closed]如何提取每个文本块并将其放入循环语句中[关闭]
【发布时间】:2019-05-03 03:00:10
【问题描述】:

我需要在一个文件中提取特定的数据子集。 该文件如下所示。

n_1
@ 1 #   #   #   #   #   #   #   #   #   #   #   #   #   #   #   
*   #   #   #   #
*   #   #   #   #
*   #   #   #   #
*   #   #   #   #
*   #   #   #   #
#   #   #   #   #   #   #   #   #
*   *   
*   *

n_2
@ 2 #   #   #   #   #   #   #   #   #   #   #   #   #   #   #   
*   #   #   #   #
*   #   #   #   #
*   #   #   #   #
*   #   #   #   #
#   #   #   #   #   #   #   #   #
*   *   
*   *

n_3
.
.
.

这里,

@ : 某种​​模式

#: 编号

1,2,3 ...:索引

* : 字符或字符串

n_i 表示每个块中@和#之间的*个数。例如,我们可以说 n_1 是 5(在 @ 1 # # ... 和 # # # # ... 之间),而 n_2 是 4,因此每个块都没有固定线。

我的最终目标是提取每个测试块并将它们插入到终端上的循环语句中。然后,重新提取每个块内的数据。

for i in $(extracted every block); do ...; done

在这里,我找到了另一种将每个块与每个文件分开的方法。 awk -vRS= '{print > "block" NR}' file 但是我遇到 awk: cannot open "block1021" for output (Too many open files) 因为该文件包含超过 100,000 个块

【问题讨论】:

  • 不清楚,请就您的问题提供更明确的细节。
  • @RavinderSingh13 抱歉遗漏太多。我添加了更多细节,但也很难理解我的问题。有不明白的地方请留言。另一种方式意味着简单地将每个段落分隔到每个文件中。但由于段落数量众多,我得到了那个错误。

标签: bash for-loop awk grep


【解决方案1】:

我还是解决了我的问题...

来自https://askubuntu.com/questions/1052622/separate-log-text-according-to-paragraph

'根据段落分隔日志文本?'

awk -vRS= '{print > "paragraph" NR}' log.txt

来自Too many open files error while running awk command

'运行 awk 命令时打开的文件过多错误'

awk '/pattern here/{close("file"i); i++}{print > "file"i}' InputFile

我结合了这两个命令,例如,

awk -vRS= '{close("block"i); i++}{print > "block"i}' file

而且它有效。因此,通过将每个单独的文件插入到循环语句中,我可以在单个块上进行一些工作。例如,

for i in $(ls); do something; done

【讨论】:

  • for i in $(ls) 花费大量时间来购买大量商品。所以推荐for i in *
猜你喜欢
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多