根据模式将文件拆分为多个文件,并通过Unix中的搜索模式命名新文件?

时间:2014-06-02 10:03:43

标签: unix grep

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

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

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,包含各自的内容。

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

2 个答案:

答案 0 :(得分:2)

尝试:

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

答案 1 :(得分:0)

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

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