#!/bin/ksh # Script to sum up DOS files from VASP for non-polarized calculations. if [ $# -lt 3 ]; then echo "Usage: sum_dos [0] [start] [end]" echo "Or: sum_dos [1] [i] [j] [k] [l] ..." exit 1 fi type=$1 shift 1 # Contiguous if [ $type -eq 0 ]; then start=$1 end=$2 shift 2 string=$start.to.$end echo $start echo $end # First file i=$start nl=$(wc -l DOS$i | sed 's/://g' | awk '{print $1}') echo $nl sed -n '2,'$nl' p' DOS$i | awk '{printf "%12.8f %12.8f %12.8f %12.8f %12.8f \n", $1, $2, $3, $4, $2+$3+$4}' >| DOS.tmp i=$((i+1)) while [ $i -le $end ]; do sed -n '2,'$nl' p' DOS$i | awk '{printf "%12.8f %12.8f %12.8f %12.8f %12.8f \n", $1, $2, $3, $4, $2+$3+$4 }' >| DOS.tmp2 paste DOS.tmp DOS.tmp2 | awk '{printf "%15.8f %15.8f %15.8f %15.8f %15.8f \n", $1, $2+$7, $3+$8, $4+$9, $5+$10 }' >| DOS.tmp3 mv -f DOS.tmp3 DOS.tmp i=$((i+1)) done else start=$1 shift 1 # First file i=$start nl=$(wc -l DOS$i | sed 's/://g' | awk '{print $1}') echo $nl string=$start sed -n '2,'$nl' p' DOS$i | awk '{printf "%12.8f %12.8f %12.8f %12.8f %12.8f \n", $1, $2, $3, $4, $2+$3+$4 }' >| DOS.tmp for i in "$@"; do string=$(echo $string.$i) echo $i sed -n '2,'$nl' p' DOS$i | awk '{printf "%12.8f %12.8f %12.8f %12.8f %12.8f \n", $1, $2, $3, $4, $2+$3+$4 }' >| DOS.tmp2 paste DOS.tmp DOS.tmp2 | awk '{printf "%15.8f %15.8f %15.8f %15.8f %15.8f \n", $1, $2+$7, $3+$8, $4+$9, $5+$10 }' >| DOS.tmp3 mv -f DOS.tmp3 DOS.tmp done fi mv DOS.tmp DOS.SUM.$string rm -f DOS.tmp2 exit 0