【问题标题】:Split a file into multiple files based on a pattern and name the new files by the search pattern in Unix?根据模式将文件拆分为多个文件,并在 Unix 中通过搜索模式命名新文件?
【发布时间】:2019-09-04 23:01:45
【问题描述】:

如何根据搜索模式拆分文件,并且将生成的新文件的文件名与用于拆分文件的搜索模式相同。

目前,我正在使用以下命令来拆分文件。

awk '/^GROUP*/{x="F"++i;}{print > x;}' cdw_all_jobs_reduced3.txt

它以 F1、F2 等名称生成文件。但我希望文件的名称等于搜索模式行。

即如果在我的原始文件中,我有以下内容:

GROUP1
xyz
pqr
GROUP2
abc
GROUP3
sdlsa

然后新文件应按搜索模式 GROUP* 拆分并重命名为 GROUP1、GROUP2 和 GROUP3,并包含其各自的内容。

换句话说,我如何自定义生成(重命名)将根据搜索模式拆分的文件的名称?

【问题讨论】:

    标签: unix grep


    【解决方案1】:

    试试:

    awk '/^GROUP[0-9]+$/{x=$0;next}{print > x;}' cdw_all_jobs_reduced3.txt
    

    如果你想要“文件名”删除下一条语句:

    awk '/^GROUP[0-9]+$/{x=$0}{print > x;}' cdw_all_jobs_reduced3.txt
    

    【讨论】:

    • 谢谢,它有效。我知道它必须是一些存储搜索模式的 shell 变量。却猜不透。再次感谢。
    【解决方案2】:

    只是给可能需要生成大量文件的人的说明。除非您先关闭先前生成的文件,否则您的命令将崩溃,因此Juan Diego Godoy 的改进版本将是:

    awk '/^GROUP[0-9]+$/{close(x);x=$0}{print > x;}' cdw_all_jobs_reduced3.txt
    

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 2010-11-08
      • 2011-12-25
      • 2021-03-26
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      相关资源
      最近更新 更多