diff options
Diffstat (limited to 'vartak-results-show')
-rwxr-xr-x | vartak-results-show | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/vartak-results-show b/vartak-results-show new file mode 100755 index 0000000..6872943 --- /dev/null +++ b/vartak-results-show @@ -0,0 +1,60 @@ +#!/bin/sh + +help() { echo "vartak-results-show - display results with names of students + +USAGE: + vartak-results-show [OPTION]... <FILE> + +OPTIONS: + -s FIELD sort by FIELD name + -S FIELD sort by FIELD name (reversed) + -N NAMES path to file that has student names data + -h show this help message + +FILE is the CSV file that contains scores of each student. +FIELD name is one of the field from CSV header. + +NAMES data is the file containing the names of student. By default, it's +assumed that this file is named as 'names.csv' and is present in the current +directory. This file should have seat no in first column and names in the +second."; } + +err() { printf 'vartak-results-show: %s\n' "$@" >&2; exit 1; } +while getopts 'ns:S:N:h' o; do case "$o" in + s) SORTFIELD="$OPTARG" ;; + S) SORTFIELD="$OPTARG" SORTOPTS="$SORTOPTS -r" ;; + N) NAMEFILE="$OPTARG" ;; + h) help; exit ;; + *) err "invalid option -- '$OPTARG'" ;; +esac done +shift $((OPTIND - 1)) + +[ ! -f "${NAMEFILE:=names.csv}" ] && err "file not found: $NAMEFILE" + +[ "$(awk -F, '{print NF; exit}' "$NAMEFILE")" != 2 ] && + err "NAMES data doesn't have exactly 2 columns" + +[ "$#" -lt 1 ] && help >&2 && exit 1 + +data="$(awk -F, ' + FNR == NR { a[$1] = $2; next; } + { + printf("%s%s%s", $1, FS, a[$1]) + for (i = 2; i <= NF; i++) { + printf("%s%s", FS, $i) + } + print "" + } + ' "$NAMEFILE" "$1")" + +header="$(echo "$data" | head -1)" +data="$(echo "$data" | tail +2)" + +if [ -n "$SORTFIELD" ]; then + FIELDINDEX="$(echo "$header" | sed -n 's/,/\n/gp' | + grep -nx "$SORTFIELD" | cut -d: -f1)" + data="$(echo "$data" | sort -n "$SORTOPTS" -t, -k "$FIELDINDEX")" || exit +fi + +(printf "Sr. No,%s\n" "$header"; echo "$data" | nl -s, -w1) | + column --table --separator ',' --table-right 1,2,4-20 |