Linux Tips 리눅스 팁
running bc
a=$(bc -l << EOF
1 + 2.0
quit
EOF
)
echo $a
b=6.646142165465414
c=0.21654841684516
a=$(echo "scale=7; $b + $c" | bc)
echo $a
=======================================================
calculate integers
a=2
b=3
c=`expr $a - 1`
echo $c
=======================================================
Change file names of QE projwfc.x (pdos) output
#!/bin/bash
for fin in *.pdos_atm#*\(*\)_wfc#?\(?\)
do
f1=${fin/.pdos_atm#/ }
f2=${f1/_wfc#/ }
f3=${f2//\(/ }
f4=${f3//\)/ }
prefix=$(echo $f4 | awk '{print $1}')
iatm=$(echo $f4 | awk '{print $2}')
iatmtyp=$(echo $f4| awk '{print $3}')
iorbl=$(echo $f4 | awk '{print $4}')
iorb=$(echo $f4 | awk '{print $5}')
mv ${prefix}.pdos_atm#${iatm}\(${iatmtyp}\)_wfc#${iorbl}\(${iorb}\) pdos_atm_${iatm}_${iatmtyp}_${iorb}
done
mv ${prefix}.pdos_tot pdos_tot
=======================================================
read line by line
grep -v prefix sto_ncpp.scf.inp | grep -v nat | grep -v ntyp > INPTTMP
file='INPTTMP'
exec 3<&0
exec 0<$file
while read line
do
if [ "$line" == "&control" ] ; then
echo $line > FFFF
echo " prefix = xQE " >> FFFF
while read line
do
if [ "$line" == "/" ] ; then
echo $line >> FFFF
break
fi
echo " $line" >> FFFF
done
fi
done
exec 0<&3
Auto re-run
SIESTA
#!/bin/sh
#PBS -N Qdisloc409
#PBS -q full
#PBS -l nodes=1:ppn=32:full
NUMBER=`cat $PBS_NODEFILE | wc -l`
cp $PBS_NODEFILE $PBS_O_WORKDIR/PBS_NODEFILE
cd $PBS_O_WORKDIR
#mpirun -machinefile $PBS_NODEFILE -np $NUMBER $siesta -fdf ${finp} > ${fout}
fprefix="disloc409"
finp=${fprefix}.fdf
#finp="sto110disloc409_+O.fdf"
imax=5
irun=1
while [ $irun -le $imax ] ; do
fout=${fprefix}.${irun}.out
mpirun -machinefile $PBS_NODEFILE -np $NUMBER $siesta -fdf ${finp} > ${fout}
sleep 10
checkend=$(grep "End of run" ${fout})
if [ ${#checkend} -lt 5 ] ; then ## Abnormal exit
lastscf=$(grep "scf: " ${fout} | tail -1 ) ## check if saved DM is good to reuse
dmax==$(echo $lastscf | awk '{print $6}')
AAA=$(echo "$dmax < 0.01" |bc -l)
if [ !${AAA} ] ; then
rm -f *.DM
fi
((irun++))
else
break
fi
done
exit 0
======================================================
VASP
#!/bin/sh
#PBS -N Q
#PBS -q full
#PBS -l nodes=1:ppn=32:full
NUMBER=`cat $PBS_NODEFILE | wc -l`
cd $PBS_O_WORKDIR
fout="stdout.log"
imax=5
irun=1
while [ $irun -le $imax ] ; do
mpirun -machinefile $PBS_NODEFILE -np $NUMBER -genv OMP_NUM_THREADS=1 $vasp > ${fout}
sleep 10 # Waiting few seconds until writting thing on files
checkend=$(grep "General timing " OUTCAR)
if [ ${#checkend} -lt 5 ] ; then ## Abnormal exit
mv ${fout} ${fout}_${irun}
mv OUTCAR OUTCAR_${irun}
cp POSCAR POSCAR_${irun}
if [ -s CONTCAR ] ; then
cp CONTCAR POSCAR
fi
((irun++))
else
break
fi
done
if [ $irun -gt 1 ] && [ -s OUTCAR ] ; then
cp OUTCAR OUTCAR_${irun}
cp POSCAR POSCAR_${irun}
fi
exit 0