#!/bin/bash set -e #set -x usage() { cat >&2 < Options: -h print this help -n dry-run mode (for debugging) -c (continue) do not overwrite previous results EOF exit $1 } log() { echo "-#- $@" >&2 } die() { echo "ERROR: $@" >&2 exit 2 } variable_check() { eval test -n "\${$1}" || die "undefined $1" } array_check() { eval test "\${#$1}" -gt 0 || die "undefined $1" } # read args overwrite=1 debug=0 while getopts "chn" c; do case "$c" in 'c') overwrite=0 ;; 'h') usage 0 ;; 'n') debug=1 ;; '?') usage 1 ;; esac done shift $((OPTIND - 1)) [ $# -eq 1 ] || usage 1 parameters="$1" log "Running: $0 $@" log "Hostname: $(hostname -f)" declare -a TOPOLOGIES ALGORITHMS PLATFORMS COMMON_OPTS # read parameters log "Reading parameters from \"$1\"." source "$parameters" || die "cannot read parameters file: \"$parameters\"" array_check TOPOLOGIES array_check ALGORITHMS array_check PLATFORMS variable_check NHOSTS variable_check LOAD variable_check DEADLINE # default values : ${RESULTS:=$PWD/results} : ${LOBA:=$PWD/loba} COMMON_OPTS=( --cfg=contexts/factory:raw ) log "Results from : \"$RESULTS\"." [ $debug = 1 ] && log "Running in dry-run mode" outfile() { echo "$*" | sed 's,[^ ]*/,,g;s/\.xml//;y/ /_/' } params=([0]="Load" [1]="Computation" [2]="Data send amount" [3]="Data send count" ) params_pos=(9 5 7 7) firsttexline="|l|" for algo in "${ALGORITHMS[@]}"; do for bk in "" "-b"; do firsttexline=$(echo "$firsttexline r|") done done firsttexline=$(echo -e "\\\begin{tabular}{$firsttexline}\n\\hline\c") lasttexline="\\end{tabular}" secondtexline="Param/Alg" for algo in "${ALGORITHMS[@]}"; do for bk in "" "-b"; do secondtexline=$(echo -e "$secondtexline&\t${algo}${bk}") done done secondtexline=$(echo -e "$secondtexline\\t \\\\\\\\ \\hline \\hline\c") mediantexlineend=$(echo -e "\\\\\\\\ \\hline\c") # mediantexlineend=$(echo -e "$mediantexlineend\c") for plat in "${PLATFORMS[@]}"; do tmp=$(basename "$plat" ".xml") plat_output="$RESULTS/plat_$tmp" for topo in "${TOPOLOGIES[@]}"; do topo_output="$plat_output/topo_$topo" topo_data_all_output="$plat_output/data_$topo-all.tex" echo "$firsttexline" > "$topo_data_all_output" echo "$secondtexline" >> "$topo_data_all_output" for target_i in "0" "1" "2" "3"; do target_param=${params[$target_i]}; target_position=${params_pos[$target_i]}; outfilesuffix=$(outfile "${target_param[@]}") mediantexline="$target_param\t" for algo in "${ALGORITHMS[@]}"; do topo_data_out="$plat_output/data_$topo-$outfilesuffix.tex" algo_output="$topo_output/algo_$algo" args=( -T"$topo" -a"$algo" -N"$NHOSTS" -L"$LOAD" -t"$DEADLINE" "$plat" ) for bk in "" "-b"; do tmp=$(outfile "loba" $bk "${args[@]}") infile="$algo_output/$tmp.out" variable=$(awk '/'"$target_param"'/{print $'"$target_position"'}' "$infile") log "Reading $target_param from $infile : $variable" mediantexline=$(echo -e "$mediantexline&$variable\t") echo -e "$algo$bk\t$variable\n" >> "$topo_data_out" done done echo "$mediantexline" >> "$topo_data_all_output" echo "$mediantexlineend" >> "$topo_data_all_output" done echo "$lasttexline" >> "$topo_data_all_output" done done