Extract data from OUTCAR to series XSF files as AENET training set (**Bash**) =========== :: #!/bin/sh #lipai@mail.ustc.edu.cn #generate xsf files using OUTCAR and POSCAR if [ $# = 0 ]; then out="OUTCAR" else out=$1 fi echo $out rm *.temp # total number of ions in the system num_atom=`grep -m 1 "NIONS =" $out|awk '{print $12}'` echo "Total number of ions: $num_atom" # create temp files for writing xyz files typenum=`grep -m 1 'ions per type' $out |head -1 |awk '{print NF}' ` typenum=$(($typenum-4)) # how many types of ions for i in `seq $typenum` do elename=`grep -m $i POTCAR $out |tail -1 |awk '{print $3}'` j=$(($i+4)) elenum=`grep -m 1 "ions per type" $out |awk -v j=$j '{print $j}'` echo $elename $elenum for j in `seq $elenum` do echo $elename >> type.temp done done grep -A 3 -m 1 "direct lattice vectors" $out \ |tail -3 |awk '{printf("%f %f %f \n",$1,$2,$3)}' >primvec.temp grep "energy without " $out |awk '{print $4}' >energy.temp awk '/POSITION/,/drift/{ if(NF==6) print $0 }' $out > pos.temp lines=`wc pos.temp|awk '{print $1}'` num_str=`echo "$lines/$num_atom" |bc` # how many structures echo "Number of structures: $num_str" if [ -f all.xyz ]; then rm all.xyz fi for i in `seq $typenum` do elename=`grep -m $i POTCAR $out |tail -1 |awk '{print $3}'` j=$(($i+4)) elenum=`grep -m 1 "ions per type" $out |awk -v j=$j '{print $j}'` echo $elename $elenum for j in `seq $elenum` do echo $elename >> type.temp done done echo "num of str: $num_str" for i in `seq $num_str` do energy=`head -n $i energy.temp|tail -1` echo "# total energy = $energy eV" >> str_$i.xsf echo " " >> str_$i.xsf echo "CRYSTAL" >> str_$i.xsf echo "PRIMVEC" >> str_$i.xsf cat primvec.temp >> str_$i.xsf echo "PRIMCOORD" >> str_$i.xsf echo "$num_atom 1" >> str_$i.xsf end=`echo "$i*$num_atom" |bc ` head -n $end pos.temp|tail -n $num_atom >pos_i.temp paste type.temp pos_i.temp >> str_$i.xsf mv str_$i.xsf $out-$i.xsf done rm *.temp if [ ! -d "struc" ]; then mkdir struc fi mv *xsf struc