rendered paste body#!/bin/bashLIST='/mnt/Local/Encoded/list.txt'STAT='/mnt/Local/Encoded/stat.txt'TEMP='/mnt/Local/Encoded/.stat.temp'COL=''VALUE=''SORTORDER=''if [[ ! -f "$LIST" ]]; then echo "List file ['${LIST}'] not found." exitfifunction duration { dur="$1" dur_h=$( echo "$dur / 3600" | bc ); if [[ ${#dur_h} < 2 ]]; then dur_h=0$dur_h; fi dur=$( echo "$dur % 3600" | bc ) dur_m=$( echo "$dur / 60" | bc ); if [[ ${#dur_m} < 2 ]]; then dur_m=0$dur_m; fi dur=$( echo "$dur % 60" | bc ) dur_s=$dur; if [[ ${#dur_s} < 2 || $dur_s < 1 ]]; then dur_s=0$dur_s; fi echo "${dur_h:-00}:${dur_m:-00}:${dur_s:-00} [$1 S]"}function nice_size() { bytes="$1"; K=1024; M=1048576; G=1073741824; T=1099511627776 if (( $( echo "$bytes < $K" | bc ) )); then res="$bytes" s='B' elif (( $( echo "$bytes < $M" | bc ) )); then res="$( echo "scale=4; $bytes / $K" | bc )" s='KB' elif (( $( echo "$bytes < $G" | bc ) )); then res="$( echo "scale=4; $bytes / $M" | bc )" s='MB' elif (( $( echo "$bytes < $T" | bc ) )); then res="$( echo "scale=4; $bytes / $G" | bc )" s='GB' else res="$( echo "scale=4; $bytes / $T" | bc )" s='TB' fi echo "$res $s [$bytes B]"}rm "$STAT" "$TEMP" 2> /dev/nullcase "$1" in -a|--ascending ) # ascending sort; reverse SORTORDER='-r ' shift ;; -d|--descending ) # descending sort; default SORTORDER='' shift ;; -m|--md5 ) # sort by md5; why ? COL='1' CMD='echo ' ;; -o|--old-size ) # sort by old size COL='3' CMD='nice_size ' PARAMS='-n' ;; -n|--new-size ) # sort by new size COL='4' CMD='nice_size ' PARAMS='-n' ;; -t|--creation-time ) # sort by creation time COL='2' CMD='date +\'%d %b %T %Y\' --date=@' PARAMS='-n' ;; -u|--creation-duration ) # sort by creation duration COL='5' CMD='duration ' PARAMS='-n' ;; -c|--compression ) # sort by compression percent COL='6' CMD='echo ' PARAMS='-n' ;; -g|--general-stats|* ) # default; make generic stats page COL='' ;;esacif [[ $COL ]]; then # sort via specific value cat "$LIST" | while read LINE; do if [[ "$LINE" != '####'* ]]; then DATA="$( awk -F'::' '{ print $2 }' <<< "$LINE" )" VALUE="$( awk -v c="$COL" -F' ' '{ print $c }' <<< "$DATA" )" NAME="$( awk -F'::' '{ print $1 }' <<< "$LINE" | sed 's/\ $//' )" echo "$VALUE $NAME" >> "$TEMP" fi done i=1 NUM=$( awk 'END { print NR }' "$TEMP" ) sort "$SORTORDER" "$PARAMS" "$TEMP" | while read SORT; do DATA=$( echo "$SORT" | cut -f1 -d' ' ) NAME="$( echo "$SORT" | sed "s/${DATA}\ //" )" PC=$( echo "scale=4; $i / $NUM" | bc ) echo -en "\r Parsing $i of $NUM :: ${PC}% Complete...." echo "$( ${CMD}${DATA} ) :: \"$NAME\"" >> "$STAT" i=$( expr $i + 1 ) done echo ''else # general stats file cat "$LIST" | while read LINE; do if [[ "$LINE" != '####'* ]]; then NUM=$( awk 'END { print NR }' "$LIST" ) NAME="$( awk -F'::' '{ print $1 }' <<< "$LINE" | sed 's/\ $//' )" DATA="$( awk -F'::' '{ print $2 }' <<< "$LINE" )" read DATA_HASH DATA_TIME DATA_OLD DATA_NEW DATA_DUR DATA_COM <<< "$DATA" if (( $DATA_TIME > ${STAT_TIME:-0} )); then STAT_TIME="$DATA_TIME" NAME_TIME="$NAME" fi if (( $DATA_OLD > ${STAT_MAX_OLD:-0} )); then STAT_MAX_OLD="$DATA_OLD" NAME_MAX_OLD="$NAME" fi if (( $DATA_OLD < ${STAT_MIN_OLD:-9999999999} )); then STAT_MIN_OLD="$DATA_OLD" NAME_MIN_OLD="$NAME" fi if (( $DATA_NEW > ${STAT_MAX_NEW:-0} )); then STAT_MAX_NEW="$DATA_NEW" NAME_MAX_NEW="$NAME" fi if (( $DATA_NEW < ${STAT_MIN_NEW:-999999999} )); then STAT_MIN_NEW="$DATA_NEW" NAME_MIN_NEW="$NAME" fi if (( $DATA_DUR > ${STAT_MAX_DUR:-0} )); then STAT_MAX_DUR="$DATA_DUR" NAME_MAX_DUR="$NAME" fi if (( $DATA_DUR < ${STAT_MIN_DUR:-999999999} )); then STAT_MIN_DUR="$DATA_DUR" NAME_MIN_DUR="$NAME" fi if (( $( echo "$DATA_COM > ${STAT_MAX_COM:-0.0000}" | bc ) )); then STAT_MAX_COM="$DATA_COM" NAME_MAX_COM="$NAME" fi if (( $( echo "$DATA_COM < ${STAT_MIN_COM:-100.0000}" | bc ) )); then STAT_MIN_COM="$DATA_COM" NAME_MIN_COM="$NAME" fi # totals TOTAL_OLD=$( echo "${TOTAL_OLD:-0} + $DATA_OLD" | bc ) TOTAL_NEW=$( echo "${TOTAL_NEW:-0} + $DATA_NEW" | bc ) TOTAL_DUR=$( echo "${TOTAL_DUR:-0} + $DATA_DUR" | bc ) TOTAL_COM=$( echo "${TOTAL_COM:-0} + $DATA_COM" | bc ) # averages AVERAGE_OLD=$( echo "scale=4;$TOTAL_OLD / $NUM" | bc ) AVERAGE_NEW=$( echo "scale=4;$TOTAL_NEW / $NUM" | bc ) AVERAGE_DUR=$( echo "scale=4;$TOTAL_DUR / $NUM" | bc ) AVERAGE_COM=$( echo "scale=4;$TOTAL_COM / $NUM" | bc ) # nice-looking stuffs NICE_TIME="$( date +'%d %b %T %Y' --date=@${STAT_TIME} ) [${STAT_TIME}]" NICE_MAX_OLD="$( nice_size $STAT_MAX_OLD )" NICE_MIN_OLD="$( nice_size $STAT_MIN_OLD )" NICE_MAX_NEW="$( nice_size $STAT_MAX_NEW )" NICE_MIN_NEW="$( nice_size $STAT_MIN_NEW )" NICE_MAX_DUR="$( duration $STAT_MAX_DUR )" NICE_MIN_DUR="$( duration $STAT_MIN_DUR )" NICE_TOTAL_OLD="$( nice_size $TOTAL_OLD )" NICE_TOTAL_NEW="$( nice_size $TOTAL_NEW )" NICE_TOTAL_DUR="$( duration $TOTAL_DUR )" NICE_AVERAGE_OLD="$( nice_size $AVERAGE_OLD )" NICE_AVERAGE_NEW="$( nice_size $AVERAGE_NEW )" NICE_AVERAGE_DUR="$( duration $AVERAGE_DUR )" fi done ################################################################### ## This part looks confusing, it's all inside the echo statement ## ################################################################### echo -e "######## Stats for IDE [Generated from '${LIST}'] ########Number of Encoded Videos :: $NUMMost Recent :: \"$NAME_TIME\" :: $NICE_TIME#### Unencoded SizeLargest :: \"$NAME_MAX_OLD\" :: $NICE_MAX_OLDSmallest :: \"$NAME_MIN_OLD\" :: $NICE_MIN_OLDAverage :: $NICE_AVERAGE_OLD#### Encoded SizeLargest :: \"$NAME_MAX_NEW\" :: $NICE_MAX_NEWSmallest :: \"$NAME_MIN_NEW\" :: $NICE_MIN_NEWAverage :: $NICE_AVERAGE_NEW#### Encoding DurationLongest :: \"$NAME_MAX_DUR\" :: $NICE_MAX_DURShortest :: \"$NAME_MIN_DUR\" :: $NICE_MIN_DURAverage :: $NICE_AVERAGE_DUR#### Compression RatiosHighest :: \"$NAME_MAX_COM\" :: ${STAT_MAX_COM}%Lowest :: \"$NAME_MIN_COM\" :: ${STAT_MIN_COM}%Average :: ${AVERAGE_COM}% #### Total SizeUnencoded :: $NICE_TOTAL_OLDEncoded :: $NICE_TOTAL_NEW" > "$STAT" ############################################# ## end of confusing-looking echo statement ## #############################################fi#rm "$TEMP" 2> /dev/null