Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- shopt -s extglob; set +H
- [[ $1 == '-x' ]] && { shift; set -x; }
- startTime='results1.txt'
- finTime='results2.txt'
- startProtocol='peoples.csv'
- resultsCSV='protocol.csv'
- declare -A k2v=([s]='startTime' [f]='finTime' [p]='startProtocol' [r]='resultsCSV')
- while getopts 's: f: p: r:' k; do
- [[ $k == '?' ]] && continue
- eval "${k2v[$k]}='$OPTARG'"
- done
- shift $((OPTIND-1))
- declare -A StartFin
- declare -a TIME line
- for f in $startTime $finTime; do
- while read -r l; do
- IFS='#' read -a line <<<"$l"
- ID=${line[0]}
- TS=${line[1]}
- IFS=' .' read -a TIME <<<"$TS"
- StartFin[$ID]+=':'$(( $(date -d "1970-01-01 +${TIME[0]} days ${TIME[1]}" +%s)*1000+${TIME[2]##+(0)} ))
- done <$f
- done
- {
- while read -r l; do
- IFS='#' read -a line <<<"$l"
- ID=$(sed -nr 's%^\s*0*([1-9][0-9]*)\s*$%\1%p' <<<"${line[0]}")
- NAME=${line[1]}; NAME=${NAME##+( )}; NAME=${NAME%%+( )}
- if [[ ! ${StartFin[$ID]} ]]; then
- RES=99999999
- elif IFS=':' read -a TIME <<<"${StartFin[$ID]}"; [[ ${#TIME[@]} -ne 3 ]]; then
- RES=88888888
- elif ms=$(( TIME[2]-TIME[1] )); (( ms<=0 )); then
- RES=77777777
- else
- RES=$ms
- fi
- lsec=$(( ${#RES}-3 ))
- if (( lsec<0 )); then
- SEC="0.$RES"
- else
- SEC="${RES:0:$lsec}.${RES:$lsec}"
- fi
- echo "${RES}$(printf '%03g' $ID)#$NAME#$ID#$SEC"
- done <$startProtocol
- } | \
- sort -n | cut -d'#' -f2- | nl -s'#' -n ln | tee $resultsCSV
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement