如何在出现N次模式后将文件拆分为多个文件?

gin*_*ino 3 awk text-processing csplit

我在 Linux 上有一个文件,其中包含数千个分子的坐标。每个分子都以包含始终相同模式的一行开始:

@<TRIPOS>MOLECULE
Run Code Online (Sandbox Code Playgroud)

然后继续其他行。我想将文件拆分为多个文件,每个文件包含一定数量的分子。什么是最简单的方法来做到这一点?

αғs*_*нιη 10

一种方法是使用awk

awk -v moleculesNum=7 '
/^@<TRIPOS>MOLECULE/{
    if((++num)%moleculesNum==1){
        close(outfile); outfile="file" (++Output)
    }
}
{ print >outfile }' infile
Run Code Online (Sandbox Code Playgroud)

这会将原始文件拆分为多个文件,每个文件最多有 7 个分子(可在moleculesNum=7参数中调整)