我写了一个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) xx00创建的第一行是一个空文件,因为分隔符位于第一行。我怎么才能避免这种情况?
预期的输出将是名为ZINC32514653.mol2和ZINC982347645.mol2的文件。A以防万一有两个条目具有相同的ZINC### ZINC982347645_2.mol2。
发布于 2016-07-28 12:01:45
您只需知道是否可以从这个man csplit页面获得:-
告诉csplit更改前缀:-
-f, --prefix=PREFIX
use PREFIX instead of 'xx'若要排除空文件:-
-z, --elide-empty-files
remove empty output files发布于 2016-07-28 13:02:59
这不能用csplit来完成。我推荐一些大致如下的内容:
awk '/@<TRIPOS>MOLECULE/ { getline file; next } {print $0 > file }'https://stackoverflow.com/questions/38635647
复制相似问题