csplit 前缀作为文件上下文

csplit prefix as file context

我写了一个 bash 脚本来分割文件。该文件如下所示:

@<TRIPOS>MOLECULE
ZINC32514653
....
....

@<TRIPOS>MOLECULE
ZINC982347645
....
....

这是我写的脚本:

#!/bin/bash
#split the file into files named xx##.mol2
csplit -b %d.mol2 ./Zincpharmer_ligprep_1.mol2 '/@<TRIPOS>MOLECULE/' '{*}'
#rename all files called xx##.mol2 by their 2nd line which is ZINC######
for filename in ./xx*.mol2; 
do
    newFilename=$(echo $filename | sed -n 2p $filename)
    if [ ! -e "./$newFilename.mol2" ]; then
    mv -i $filename ./$newFilename.mol2

    else
        num=2
        while [ -e "./"$newFilename"_$num.mol2" ]; do
        num=$((num+1))  
        done
        mv $filename "./"$newFilename"_$num.mol2"
    fi
    done

我有两个问题:

1) 有没有办法将前缀选项包含到 csplit 中并告诉 csplit 前缀是分隔符之后的行。

2) csplit xx00 创建的第一行是一个空文件,因为分隔符在第一行。我怎样才能避免这种情况?

预期的输出将是名为 ZINC32514653.mol2 和 ZINC982347645.mol2 的文件。如果有两个条目具有相同的 ZINC### ZINC982347645_2.mol2.

如果可以从这个 man csplit 页面获得所有您需要知道的信息:-

告诉csplit更改前缀:-

-f, --prefix=PREFIX
       use PREFIX instead of 'xx'

排除空文件:-

-z, --elide-empty-files
       remove empty output files

csplit 无法做到这一点。我推荐以下内容:

awk  '/@<TRIPOS>MOLECULE/ { getline file; next } {print [=10=] > file }'