【问题标题】:Split files on Linux based on patterns基于模式在 Linux 上拆分文件
【发布时间】:2017-10-17 16:15:28
【问题描述】:

需要一个快速的 Linux 技巧。

我有一个文件,同时会有多个记录的批次。

喜欢

123 HDR 098 LLK
blah
blah
blah

456 HDR 098 LLK
blah
blah
blah
789 HDR 098 LLK

blah
blah
blah

我需要将其拆分为多个文件,从“HDR”(包含)到下一个 HDR(不包含)。

以这种方式,如果文件中有 100 个批次,我需要将其分成 4 个文件,每个文件 25 个。

【问题讨论】:

标签: file unix awk split


【解决方案1】:

awk 来救援!

awk '/HDR/{c++} {print > FILENAME"_"c }' file

或更一般地,在拆分文件中获取n 模式,例如n=3。

awk -v n=3 '/HDR/{k=int(c/n)+1; c++} {print > FILENAME"_"k }' file       

【讨论】:

  • 那太好了……等分@karakfa。我有预感awk会来救援。如何将此扩展到我选择的计数?说一个文件中的 x 个批次。
  • 它取决于内容,您将获得与文件中​​模式计数一样多的拆分文件。或者,您可能在问别的问题?
  • 我们非常接近。我在问我们现在是否可以将它们分组为 5 个模式匹配,然后写入文件。像 awk '/HDR/{c+5} {print > FILENAME"_"c }' file 之类的东西,好像在找到一定数量的匹配项之前我不会写入拆分文件。
  • @karakfa 因为只有有限数量的文件描述符,所以在递增c 之前关闭最后一个文件可能很重要。另外:+1。
猜你喜欢
  • 2021-10-19
  • 2021-02-13
  • 2023-04-01
  • 2012-06-18
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
  • 2018-04-06
  • 2021-12-14
相关资源
最近更新 更多