Extract data from Gaussian output file *.log to series XSF files (Bash)¶
grep "SCF Done" *.log|awk '{print $5}' >energy.dat
cat *.log |sed -n '/concise/,/Rotational/p'| awk '{if($1 ~ /^[0-9]+$/) print $0;}' >stru.dat
natoms=`grep NAtoms *.log |head -1 |awk '{print $2}'`
split -l $natoms -a 3 -d stru.dat g
mkdir str
rm stru.dat
mv g* energy.dat str
cd str
mv g09.pbs ..
sed -i '$d' energy.dat
ls g* >files
a=`tail -1 files`
rm $a
a=`tail -2 files|head -1 `
rm $a
rm files
a=1
for i in g*
do
e=`head -n $a energy.dat |tail -1`
echo "# total energy = $e a.u." >$i.xsf
echo " " >>$i.xsf
echo "ATOMS" >>$i.xsf
sort -nk 2 $i |awk '{if($2=="1") printf("H %f %f %f 0 0 0\n",$4,$5,$6);
else printf("O %f %f %f 0 0 0\n",$4,$5,$6)} ' >>$i.xsf
a=$(($a+1))
done
cd ..
mkdir xsf
mv str/*.xsf xsf