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 }'
我写了一个 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 }'