#!/bin/ksh # Script to sum up DOS files from VASP 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 %12.8f %12.8f %12.8f %12.8f \n", $1, $2, $3, $4, $5, $6, $7, $2+$4+$6, $3+$5+$7}' >| 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 %12.8f %12.8f %12.8f %12.8f \n", $1, $2, $3, $4, $5, $6, $7, $2+$4+$6, $3+$5+$7}' >| DOS.tmp2 paste DOS.tmp DOS.tmp2 | awk '{printf "%15.8f %15.8f %15.8f %15.8f %15.8f %15.8f %15.8f %15.8f %15.8f \n", $1, $2+$11, $3+$12, $4+$13, $5+$14, $6+$15, $7+$16, $8+$17, $9+$18}' >| 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 sed -n '2,'$nl' p' DOS$i | awk '{printf "%12.8f %12.8f %12.8f %12.8f %12.8f %12.8f %12.8f %12.8f %12.8f \n", $1, $2, $3, $4, $5, $6, $7, $2+$4+$6, $3+$5+$7}' >| DOS.tmp string=$start for i in "$@"; do echo $i string=$(echo $string.$i) sed -n '2,'$nl' p' DOS$i | awk '{printf "%12.8f %12.8f %12.8f %12.8f %12.8f %12.8f %12.8f %12.8f %12.8f \n", $1, $2, $3, $4, $5, $6, $7, $2+$4+$6, $3+$5+$7}' >| DOS.tmp2 paste DOS.tmp DOS.tmp2 | awk '{printf "%15.8f %15.8f %15.8f %15.8f %15.8f %15.8f %15.8f %15.8f %15.8f \n", $1, $2+$11, $3+$12, $4+$13, $5+$14, $6+$15, $7+$16, $8+$17, $9+$18}' >| DOS.tmp3 mv -f DOS.tmp3 DOS.tmp done fi mv DOS.tmp DOS.SUM.$string rm -f DOS.tmp2 exit 0