Ich habe ein Bash-Skript geschrieben, um eine Datei zu teilen. Die Datei sieht wie folgt aus:csplit Präfix als Dateikontext
@<TRIPOS>MOLECULE
ZINC32514653
....
....
@<TRIPOS>MOLECULE
ZINC982347645
....
....
Hier ist das Skript schrieb ich:
#!/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
Ich habe zwei Fragen:
1) ist es eine Möglichkeit, das Präfix Option in csplit aufzunehmen und csplit sagt, dass das Präfix die Zeile nach dem Trennzeichen ist.
2) Die erste von csplit xx00 erstellte Zeile ist eine leere Datei, da sich das Trennzeichen in der ersten Zeile befindet. Wie kann ich das vermeiden?
Die erwartete Ausgabe wäre Dateien mit den Namen ZINC32514653.mol2 und ZINC982347645.mol2. Eine falls es zwei Einträge mit dem gleichen ZINC### ZINC982347645_2.mol2 gibt.
Wenn Sie die erwartete Ausgabe und eine Beispieleingabe hinzufügen können, werden die Leute hier versuchen und Ihnen eine möglicherweise effektivere Lösung geben! – Inian