Portál AbcLinuxu, 29. října 2025 03:26
comptest.bash: (spouštění na vlastní nebezpečí)
#!/bin/bash
#comprimation methods/commands
#for CMDA[] eval is used
TXTA=()
CMDA=()
EXTA=()
#bzip2 and gzip
TXTA+=( 'gz -9' )
EXTA+=( '.gz' )
CMDA+=( "gzip -9 '[file]'" )
TXTA+=( 'bz2 -9' )
EXTA+=( '.bz2' )
CMDA+=( "bzip2 -9 '[file]'" )
TXTA+=( 'gz.bz2 -9 -9' )
EXTA+=( '.gz.bz2' )
CMDA+=( "gzip -9 -c '[file]' | bzip2 -9 > '[file]${EXTA[2]}'" )
TXTA+=( 'bz2.gz -9 -9' )
EXTA+=( '.bz2.gz' )
CMDA+=( "bzip2 -9 -c '[file]' | gzip -9 > '[file]${EXTA[3]}'" )
#7zip
TXTA+=( '7z' )
EXTA+=( '.7z' )
CMDA+=( "7z a -bd '[file]${EXTA[4]}' '[file]'" )
TXTA+=( '7z.gz -txz -9' )
EXTA+=( '.7z.gz' )
CMDA+=( "7z a -bd -an -txz -so '[file]' | gzip -9 > '[file]${EXTA[5]}'" )
TXTA+=( '7z.bz2 -txz -9' )
EXTA+=( '.7z.bz2' )
CMDA+=( "7z a -bd -an -txz -so '[file]' | bzip2 -9 > '[file]${EXTA[6]}'" )
TXTA+=( 'gz.7z -txz -9' )
EXTA+=( '.gz.7z' )
CMDA+=( "gzip -9 -c '[file]' | 7z a -bd -txz -si '[file]${EXTA[7]}'" )
TXTA+=( 'bz2.7z -9 -txz' )
EXTA+=( '.bz2.7z' )
CMDA+=( "bzip2 -9 -c '[file]' | 7z a -bd -txz -si '[file]${EXTA[8]}'" )
TXTA+=( '7z.gz.bz2 -txz -9 -9' )
EXTA+=( '.7z.gz.bz2' )
CMDA+=( "7z a -bd -an -txz -so '[file]' | gzip -9 | bzip2 -9 > '[file]${EXTA[9]}'" )
TXTA+=( '7z.bz2.gz -txz -9 -9' )
EXTA+=( '.7z.bz2.gz' )
CMDA+=( "7z a -bd -an -txz -so '[file]' | bzip2 -9 | gzip -9 > '[file]${EXTA[10]}'" )
TXTA+=( 'gz.7z.bz2 -9 -txz -9' )
EXTA+=( '.gz.7z.bz2' )
CMDA+=( "gzip -9 -c '[file]' | 7z a -bd -an -txz -si -so | bzip2 -9 > '[file]${EXTA[11]}'" )
TXTA+=( 'bz2.7z.gz -9 -txz -9' )
EXTA+=( '.bz2.7z.gz' )
CMDA+=( "bzip2 -9 -c '[file]' | 7z a -bd -an -txz -si -so | gzip -9 > '[file]${EXTA[12]}'" )
TXTA+=( 'gz.bz2.7z -9 -9 -txz' )
EXTA+=( '.gz.bz2.7z' )
CMDA+=( "gzip -9 -c '[file]' | bzip2 -9 | 7z a -bd -txz -si '[file]${EXTA[13]}'" )
TXTA+=( 'bz2.gz.7z -9 -9 -txz' )
EXTA+=( '.bz2.gz.7z' )
CMDA+=( "bzip2 -9 -c '[file]' | gzip -9 | 7z a -bd -txz -si '[file]${EXTA[14]}'" )
TXTA+=( 'gz -1' )
EXTA+=( '.1.gz' )
CMDA+=( "gzip -1 -c '[file]' > '[file].1.gz'" )
TXTA+=( 'bz2 -1' )
EXTA+=( '.1.bz2' )
CMDA+=( "bzip2 -1 -c '[file]' > '[file].1.bz2'" )
TXTA+=( 'gz -2' )
EXTA+=( '.2.gz' )
CMDA+=( "gzip -2 -c '[file]' > '[file].2.gz'" )
TXTA+=( 'bz2 -2' )
EXTA+=( '.2.bz2' )
CMDA+=( "bzip2 -2 -c '[file]' > '[file].2.bz2'" )
TXTA+=( 'gz -3' )
EXTA+=( '.3.gz' )
CMDA+=( "gzip -3 -c '[file]' > '[file].3.gz'" )
TXTA+=( 'bz2 -3' )
EXTA+=( '.3.bz2' )
CMDA+=( "bzip2 -3 -c '[file]' > '[file].3.bz2'" )
TXTA+=( 'gz -4' )
EXTA+=( '.4.gz' )
CMDA+=( "gzip -4 -c '[file]' > '[file].4.gz'" )
TXTA+=( 'bz2 -4' )
EXTA+=( '.4.bz2' )
CMDA+=( "bzip2 -4 -c '[file]' > '[file].4.bz2'" )
TXTA+=( 'gz -5' )
EXTA+=( '.5.gz' )
CMDA+=( "gzip -5 -c '[file]' > '[file].5.gz'" )
TXTA+=( 'bz2 -5' )
EXTA+=( '.5.bz2' )
CMDA+=( "bzip2 -5 -c '[file]' > '[file].5.bz2'" )
TXTA+=( 'gz -6' )
EXTA+=( '.6.gz' )
CMDA+=( "gzip -6 -c '[file]' > '[file].6.gz'" )
TXTA+=( 'bz2 -6' )
EXTA+=( '.6.bz2' )
CMDA+=( "bzip2 -6 -c '[file]' > '[file].6.bz2'" )
TXTA+=( 'gz -7' )
EXTA+=( '.7.gz' )
CMDA+=( "gzip -7 -c '[file]' > '[file].7.gz'" )
TXTA+=( 'bz2 -7' )
EXTA+=( '.7.bz2' )
CMDA+=( "bzip2 -7 -c '[file]' > '[file].7.bz2'" )
TXTA+=( 'gz -8' )
EXTA+=( '.8.gz' )
CMDA+=( "gzip -8 -c '[file]' > '[file].8.gz'" )
TXTA+=( 'bz2 -8' )
EXTA+=( '.8.bz2' )
CMDA+=( "bzip2 -8 -c '[file]' > '[file].8.bz2'" )
TXTA+=( 'lrzip -L 9' )
EXTA+=( '.lrz' )
CMDA+=( "lrzip -L 9 '[file]'" )
TXTA+=( 'rzip -9' )
EXTA+=( '.rz' )
CMDA+=( "rzip -9 '[file]'" )
#here you can add item(s) begin
# index 33
#here you can add item(s) end
TAR_CMD=( "tar -cf" "tar -rf" )
#default values
TESTS=( 0 1 2 3 )
TMP='/tmp'
TMPDIR='comptest'
INPUTTYPE="-10"
VERBOSE=0
VERBOSE_REPORT=0
USE_TIME=0
STOPIT=0
LEAVE_COMP=0
SAVE_FILENAME=''
OPEN_FILENAME=''
TAR_FILENAME=''
TAR_TMP_DIR="TAR-TMP-DIR_0123456789QWX_$(date '+%s')"
SIZE_OF_BLOCK='4096'
#do not change ADD_SIZE_TO_BLOCK, it was a good idea but has been forgotten :(
ADD_SIZE_TO_BLOCK='0'
REPORT_SPEED_W='0.5'
REPORT_RATIO_W='0.5'
REPORT_RATIO_MIN='0.75'
REPORT_SPEED_MIN='4194304'
GRAPH_POINT='[letter]'
GRAPH_POINT_L='0'
BCCMD="$( which bc )"
if [ "$?" -ne "0" ]; then
echo -e "\n'bc' should be installed\n" >&2
exit 3
fi
function waitforkey() {
if [ "$STOPIT" -eq "1" ]; then
read -p "Press any key to continue... " -n1 -s
echo ''
fi
}
function waitforkey2() {
if [ "$STOPIT" -eq "1" ]; then
read -n1 -s
echo ''
fi
}
#getopt parse -----------------------
while getopts ":vmn:t:T:u:hb:fir:R:s:S:cIw:o:e:dLl" opt; do
case $opt in
n)
if [ "$OPTARG" == "gz" ]; then
TESTS=( 15 17 19 21 23 25 27 29 0 )
elif [ "$OPTARG" == "bz2" ]; then
TESTS=( 16 18 20 22 24 26 28 30 1 )
elif [ "$OPTARG" == "gzbz2" ]; then
TESTS=( 15 17 19 21 23 25 27 29 0 16 18 20 22 24 26 28 30 1 )
elif [ "${OPTARG}" == "allbest1" ]; then
TESTS=( 0 1 31 32 )
elif [ "${OPTARG:0:1}" == "e" ]; then
TESTS=( ${OPTARG:1} )
else
TESTS=()
cnt="$((${OPTARG}+1))"
if [ ${cnt} -gt ${#CMDA[@]} ]; then
cnt="${#CMDA[@]}"
fi
for(( i=0; i < "$cnt"; i++ )); do
TESTS+=( $i )
done
fi
if [ ${#TESTS[@]} -lt "1" ]; then
echo 'Ilegal -n value.' >&2
exit 1
fi
;;
t)
TMP="$OPTARG"
if [ ! -d ${TMP} ]; then
echo "-t Temp path '${TMP}' doesn't exist." >&2
exit 1
fi
;;
T)
TMPDIR="$OPTARG"
;;
u)
TAR_TMP_DIR="$OPTARG"
;;
m)
USE_TIME=1
;;
v)
VERBOSE=1
;;
c)
GRAPH_POINT="\e[7m[letter]\033[0m"
GRAPH_POINT_L='12'
;;
b)
SIZE_OF_BLOCK="$( echo "$OPTARG+0" | $BCCMD )"
if [ -z "$SIZE_OF_BLOCK" ]; then
echo "Ilegal -b value." >&2
exit 1
fi
if [ "$SIZE_OF_BLOCK" -lt "1" ]; then
echo "Ilegal -b value." >&2
exit 1
fi
;;
#B)
# ADD_SIZE_TO_BLOCK="$( echo "$OPTARG+0" | $BCCMD )"
# if [ -z "$ADD_SIZE_TO_BLOCK" ]; then
# echo "Ilegal -B value." >&2
# exit 1
# fi
# if [ "$ADD_SIZE_TO_BLOCK" -lt "0" ]; then
# echo "Ilegal -B value." >&2
# exit 1
# fi
# ;;
r)
REPORT_RATIO_W="$( echo "x=$OPTARG+0; if(x>0&&x<1) x;" | $BCCMD )"
if [ -z "$REPORT_RATIO_W" ]; then
echo 'Ilegal -r value (0<x<1).' >&2
exit 1
fi
;;
R)
REPORT_RATIO_MIN="$( echo "x=$OPTARG+0; if(x>0&&x<1) x;" | $BCCMD )"
if [ -z "$REPORT_RATIO_MIN" ]; then
echo 'Ilegal -R value (0<x<1).' >&2
exit 1
fi
;;
s)
REPORT_SPEED_W="$( echo "x=$OPTARG+0; if(x>0&&x<1) x;" | $BCCMD )"
if [ -z "$REPORT_SPEED_W" ]; then
echo 'Ilegal -s value \(0<x<1\).' >&2
exit 1
fi
;;
S)
REPORT_SPEED_MIN="$( echo "x=$OPTARG+0; if(x>1) x;" | $BCCMD )"
if [ -z "$REPORT_SPEED_MIN" ]; then
echo 'Ilegal -S value (x>1).' >&2
exit 1
fi
;;
i)
INPUTTYPE="-2"
break
;;
f)
INPUTTYPE="-1"
shift $(( OPTIND - 1 ))
break
;;
o)
INPUTTYPE="-3"
OPEN_FILENAME="$OPTARG"
if [ ! -f "${OPEN_FILENAME}" ]; then
echo "Ilegal -o value, file '${OPEN_FILENAME}' doesn't exist." >&2
exit 1
fi
break
;;
I)
STOPIT=1
;;
l)
LEAVE_COMP=1
;;
L)
LEAVE_COMP=2
;;
e)
TAR_FILENAME="$OPTARG"
if [ -f "${TAR_FILENAME}" ]; then
echo "Write report file -w '${TAR_FILENAME}' exists." >&2
exit
fi
;;
d)
INPUTTYPE="-4"
break
;;
w)
SAVE_FILENAME="$OPTARG"
if [ -f "${SAVE_FILENAME}" ]; then
echo "Write report file -w '${SAVE_FILENAME}' exists." >&2
exit
fi
;;
h)
echo 'A small test of comprimation method performance.'
echo ' By Igor Mega, ver: 0.12, license: BSD 3-clause'
echo ' '
echo " This test create the 'comptest' directory (by default) in /tmp (by default)."
echo ' All is done in this direcory (before/after a comprim command cd is used).'
echo " Each tested file is copied (by 'cp') to this directory more times."
echo ' Only on success all created and copied files in this directory are deleted.'
echo " The create 'comptest' direcotry is deleted too (if is empty on finish)."
echo ' WARMING:'
echo ' If you break this test or an error si reached clean it yourself!'
echo ' '
waitforkey
echo ' comptest.bash [switch] -i or -f or -d or -o'
echo ' -n X maximum number of test (default is -n "3" or -n "e0 1 2 3")'
echo ' 0 = gzip -9'
echo ' 1 = gzip -9, bzip2 -9'
echo ' 2 = + gzip -9, bzip2 -9 combination [DEFAULT]'
echo ' 4 = + 7z'
echo ' 8 = + gz.7z, bz2.7z, 7z.gz, 7z.bz2 (-9)'
echo ' 14 = + all 7z gz bz2 combination (-9 -9)'
echo ' 30 = + gzip -1, bzip2 -1 to gzip -8, bzip2 -8'
echo ' 31 = + lrzip -L 9'
echo ' 32 = + rzip'
echo ' -n gz = 1 16 18 20 22 24 26 28 30 (gzip -1 - gzip -9)'
echo ' -n bz2 = 2 17 19 21 23 25 27 29 31 (bzip2 -1 - bzip2 -9)'
echo ' -n gzbz2 = gz + bz2'
echo ' -n allbest1 = gz -9, bz2 -9, 7z, lrzip -L 9, rzip -9'
echo ' -n eX = X is space separated № of tests'
echo ' '
waitforkey
echo " -t 'temp/working direcotry path', have to exists, /tmp; is default"
echo " -T 'test direcotry name', must not exists 'comptest' is default"
echo " -u 'test tar-sub-direcotry name', used with '-d' action."
echo " The name is unique name, same name directory as input."
echo " mast not exist. Default: TAR-TMP-DIR_0123456789QWX_\$(date '+%s')"
echo ' '
echo ' -v verbose process'
echo " -w 'file name' of save results !full absolute path!"
echo " The saved file can be read by -o action"
echo " -e 'file name' of saved tar !full absolute path!"
echo " The created tar file contains all files with full path!"
echo ' -m use "time" for each test (use with -v)'
echo ' '
echo " -l (small letter 'L') leave all compressed files"
echo ' -L leave the best compreesed ratio file'
echo ' '
waitforkey
echo " -b 'size' of device block, default 4096"
echo ' if -o is used this value is restored from -o file'
echo ' '
echo " -s 'speed' \"weight\" abstract limit for slow/fast depends on mim-max internval,"
echo ' default 0.5'
echo " -r 'ratio' \"weight\" abstract limit for bad/good depends on mim-max internval,"
echo ' default 0.5'
echo " -R 'min' commpresion ratio for graph (dot vertical line) default 0.75."
echo ' (compressed is 25 % smaller)'
echo ' if the value is out of graph area the border of graph is interleaved '
echo ' by dots on right or left side'
echo " -S 'min' speed for graph (tilda horizontal line) default 4194304 = 4MiB/sec."
echo ' if the value is out of graph area the spaces on the left & right of '
echo ' text "compression ratio" is filled by ~ (on top or bottom)'
echo ' '
waitforkey
echo ' -i input full filename from stdin'
echo ' USE AS LAST PARAMETR (next paramters are not used)'
echo ' all no-regular-file will be ignored'
echo ' !Use full absolute path!'
echo ' -d input full direcory name from stdin'
echo ' on each directory tar is used and the tar is tested'
echo ' USE AS LAST PARAMETR (next paramters are not used)'
echo ' all no-director will be ignored'
echo ' !Use full absolute path!'
echo ' -f input full filenames as next parameters'
echo ' USE AS LAST PARAMETR (next paramters are the full file names)'
echo ' all no-regular-file is ignored'
echo ' !Use full absolute path!'
echo ' -o file name, read saved result file - no test, show result only'
echo ' USE AS LAST PARAMETR (next paramters is the file name only)'
echo ' '
echo ' -I stop each max 25 lines (for help use it as the first parametr)'
echo ' -c use invertcolor in graph'
waitforkey
echo ' '
echo ' Example:'
echo ' comptest.bash -f fullfilename fullfilename fullfilename'
echo ' or'
echo ' find ./* -type f -exec readlink -f {} \; | ./comptest.bash -i'
echo ' or'
echo ' find /fullpath/dir/ -midepth 1 maxdepth 1 -type d | ./comptest.bash -d'
exit 0
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
if [ ! -d "${TMP}" ]; then
echo "Use -t, Temp path '${TMP}' doesn't exist." >&2
exit 1
fi
if [ -d "${TMP}/${TMPDIR}" ]; then
echo "Use -T, Testing directory '${TMPDIR}' already exist (Maybe it is an artefact from an unfinished test)." >&2
exit 1
fi
if [ "${INPUTTYPE}" -lt "-4" ]; then
echo "Use -i or -f or -d or -o param, or -h for help." >&2
exit 1
fi
#Functions -----------------------
HLP_BC_FORMAT_OUT_NUMBER4='if(x<1000) print " "; if(x<100) print " "; if(x<10) print " "; if(x<1) print 0; x'
HLP_BC_FORMAT_OUT_NUMBER4INT='if(x<1000) print " "; if(x<100) print " "; if(x<10) print " "; x'
HLP_BC_FORMAT_OUT_NUMBER2INT='if(x<10) print " "; x'
HLP_BC_FORMAT_OUT_NUMBER6INT='if(x<1000000) print " "; if(x<100000) print " "; if(x<10000) print " "; if(x<1000) print " "; if(x<100) print " "; if(x<10) print " "; x'
HLP_BC_FORMAT_OUT_NUMBER1='if(x<1 && x>0) print 0; x'
HLP_BC_FORMAT_OUT_NUMBER2='if(x<10) print " "; if(x<1) print 0; x'
HLP_BC_FORMAT_OUT_NUMBER1INT='x'
HLP_BC_FORMAT_DIGIT0='scale=0; if(x<0)x=(x-0.5)/1; if(x>=0)x=(x+0.5)/1;'
HLP_BC_FORMAT_DIGIT2="scale=6; x=x*100; ${HLP_BC_FORMAT_DIGIT0} scale=2; x=x/100;"
HLP_BC_FORMAT_DIGIT3="scale=6; x=x*1000; ${HLP_BC_FORMAT_DIGIT0}; scale=3; x=x/1000;"
HLP_BC_FORMAT_DIGIT4="scale=6; x=x*10000; ${HLP_BC_FORMAT_DIGIT0}; scale=4; x=x/10000;"
function gettime() {
echo -n $( date +'%s.%N' )
}
#1st argument start time
#2st argument finished time
#3st argument size
function getspeed() {
if [ -z "$1" -a -z "$2" -a -z "$3" ]; then
echo "Type of input of getspeed function mismatch error." >&2
exit 3
fi
echo "scale=9; x=$3/( $2 - $1 ); ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD
}
#1st argument start time
#2st argument compresed size
function getratio() {
if [ -z "$1" -a -z "$2" ]; then
echo "Type of input of getratio function mismatch error." >&2
exit 3
fi
echo "scale=9; x=$2/$1; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD
}
#1st argument start time
#2st argument compresed size
function getratio_block() {
if [ -z "$1" -a -z "$2" ]; then
echo "Type of input of getratio function mismatch error." >&2
exit 3
fi
a="$( echo "scale=0; a=($1/${SIZE_OF_BLOCK})+1; scale=9; a*(${SIZE_OF_BLOCK} + ${ADD_SIZE_TO_BLOCK})" | $BCCMD )"
b="$( echo "scale=0; a=($2/${SIZE_OF_BLOCK})+1; scale=9; a*(${SIZE_OF_BLOCK} + ${ADD_SIZE_TO_BLOCK})" | $BCCMD )"
echo "scale=9; x=$b/$a; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD
}
#mult by 100; with 2 decimal digits
function format_ratio() {
if [ -z "$1" ]; then
echo "Type of input of format_ratio function mismatch error." >&2
exit 3
fi
if [ "$#" -gt "1" ]; then
r="$( echo "scale=9; x=$1*100.0; ${HLP_BC_FORMAT_DIGIT2} ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
echo -n "$r %"
exit 1
fi
r="$( echo "scale=9; x=$1*100.0; ${HLP_BC_FORMAT_DIGIT2} ${HLP_BC_FORMAT_OUT_NUMBER4}" | $BCCMD )"
r2="$( echo "x=$1; ${HLP_BC_FORMAT_DIGIT4} ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
echo -n "${r} % (${r2})"
}
#speed i B/sec, KiB/sec MiB/sec
function format_speed() {
if [ -z "$1" ]; then
echo "Type of input of format_speed function mismatch error." >&2
exit 3
fi
n2="$( echo "$1 > 734208" | $BCCMD )"
n1="$( echo "$1 > 717" | $BCCMD )"
if [ "$n2" -eq "1" ]; then
d='1048576'
suff='MiB/sec'
elif [ "$n1" -eq "1" ]; then
d='1024'
suff='KiB/sec'
else
d='1'
suff='B/sec '
fi
r="$( echo "scale=9; x=$1/$d; ${HLP_BC_FORMAT_DIGIT2} ${HLP_BC_FORMAT_OUT_NUMBER4}" | $BCCMD )"
if [ "$#" -gt "1" ]; then
echo -n "$r $suff"
exit 1
fi
r2="$( echo "x=$1; ${HLP_BC_FORMAT_DIGIT0} ${HLP_BC_FORMAT_OUT_NUMBER1INT}" | $BCCMD )"
echo -n "$r $suff (${r2} B/sec)"
}
function format_size() {
if [ -z "$1" ]; then
echo "Type of input of format_size function mismatch error." >&2
exit 3
fi
n4="$( echo "$1 > 769872887808" | $BCCMD )"
n3="$( echo "$1 > 751828992" | $BCCMD )"
n2="$( echo "$1 > 734208" | $BCCMD )"
n1="$( echo "$1 > 717" | $BCCMD )"
if [ "$n4" -eq "1" ]; then
d='1099511627776'
suff='TiB'
elif [ "$n3" -eq "1" ]; then
d='1073741824'
suff='GiB'
elif [ "$n2" -eq "1" ]; then
d='1048576'
suff='MiB'
elif [ "$n1" -eq "1" ]; then
d='1024'
suff='KiB'
else
d='1'
suff='B'
fi
r="$( echo "scale=9; x=$1/$d; ${HLP_BC_FORMAT_DIGIT2} ${HLP_BC_FORMAT_OUT_NUMBER4}" | $BCCMD )"
r2="$( echo "x=$1; ${HLP_BC_FORMAT_DIGIT0} ${HLP_BC_FORMAT_OUT_NUMBER1INT}" | $BCCMD )"
if [ "$d" -eq "1" ]; then
r="$( echo "x=$1; ${HLP_BC_FORMAT_DIGIT0} ${HLP_BC_FORMAT_OUT_NUMBER4INT}" | $BCCMD )"
echo -n "${r} $suff (${r2} B)"
else
echo -n "${r} $suff (${r2} B)"
fi
}
function format_time() {
if [ -z "$1" ]; then
echo "Type of input of format_time function mismatch error." >&2
exit 3
fi
rmin="$( echo "x=$1/60; ${HLP_BC_FORMAT_OUT_NUMBER2INT}" | $BCCMD )"
rsec="$( echo "scale=6; x=$1 - ${rmin}*60; ${HLP_BC_FORMAT_DIGIT2} ${HLP_BC_FORMAT_OUT_NUMBER2}" | $BCCMD )"
rt="$( echo "x=$1; ${HLP_BC_FORMAT_DIGIT4} ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
echo -n "${rmin} min ${rsec} sec (${rt} sec)"
}
#1st param value array
#return sorted index asc based on 1st param
BUBBLE_DESC=0
BUBBLE_RES=()
function bubble_sort() {
local array=($@)
local max=$(($# - 1))
BUBBLE_RES=()
for((i=0; i < $#; i++)); do
BUBBLE_RES+=("$i")
done
while ((max > 0))
do
i=0
while ((i < max))
do
if [ "${BUBBLE_DESC}" -eq "0" ]; then
r="$( echo "${array[$i]} < ${array[$((i + 1))]}" | $BCCMD )"
else
r="$( echo "${array[$i]} > ${array[$((i + 1))]}" | $BCCMD )"
fi
if [ "$r" -eq "1" ]; then
v=${array[$i]}
k=${BUBBLE_RES[$i]}
array[$i]=${array[$((i + 1))]}
BUBBLE_RES[$i]=${BUBBLE_RES[$((i + 1))]}
array[$((i + 1))]=$v
BUBBLE_RES[$((i + 1))]=$k
fi
((i += 1))
done
((max -= 1))
done
}
#variables
TESTS_COUNT="${#TESTS[@]}"
#skip file (no regular file) counter
F_SKIPCNT=0
#
RES_FILES_CNT=0
#time size size_compressed block block_compressed speed ratio ratio_block
RES_SUM_time=()
RES_SUM_size=()
RES_SUM_size_compressed=()
RES_SUM_block=()
RES_SUM_block_compressed=()
RES_SUM_speed=()
RES_SUM_ratio=()
RES_SUM_ratio_block=()
for((i=0; i<${TESTS_COUNT}; i++)); do
RES_SUM_time+=( 0 )
RES_SUM_size+=( 0 )
RES_SUM_size_compressed+=( 0 )
RES_SUM_block+=( 0 )
RES_SUM_block_compressed+=( 0 )
RES_SUM_speed+=( '?' )
RES_SUM_ratio+=( '?' )
RES_SUM_ratio_block+=( '?' )
done
# Process function -----------------------
#need one arguments "full filename"
function processfile() {
srcfile="$1"
old_leave_file_size='999999999999'
old_leave_file_name=''
if [ "$VERBOSE" -eq "1" ]; then
echo -e "\nStart file: '$srcfile'"
fi
for((i=0; i<${TESTS_COUNT}; i++)); do
index=${TESTS[$i]}
if [ ! -f "$srcfile" ]; then
echo "'processfile' - file doesn't exist." >&2
exit 5
fi
fname="$( basename "$srcfile" )"
# ### --- hold tmp dir
cd "${TMP}/${TMPDIR}"
if [ "$?" -ne "0" ]; then
echo "CD ERROR!, 'cd \"${TMP}/${TMPDIR}\"' directory." >&2
exit 4
fi
cp "$srcfile" "./$fname"
if [ "$?" -ne "0" ]; then
echo "Copy ERROR!, 'cp \"$srcfile\"' \"./$fname\"" >&2
exit 4
fi
if [ "$VERBOSE" -eq "1" ]; then
echo "Comprimation cmd: '${TXTA[$index]}'"
echo -e "--------------------------------------------"
fi
cmdtmp="${CMDA[$index]}"
ext="${EXTA[$index]}"
ffname=${fname//"'"/"'\"'\"'"}
cmd="${cmdtmp//\[file\]/$ffname}"
if [ "$USE_TIME" -eq "1" ]; then
cmd="time -p $cmd"
fi
size="$( stat -c%s "${srcfile}" )"
if [ "$?" -ne "0" ]; then
echo "STAT ERROR!, 'stat -c%s \"${srcfile}\"' directory." >&2
exit 3
fi
start_t="$( gettime )"
# ### --- dangerous command
eval "$cmd"
ret_code=$?
if [ "$ret_code" -ne "0" ]; then
echo "COMPRIM ERROR!, CMD: '$cmd' ." >&2
exit 3
fi
stop_t="$( gettime )"
# ### --- hold tmp dir
cd "${TMP}/${TMPDIR}"
if [ "$?" -ne "0" ]; then
echo "CD ERROR!, 'cd \"${TMP}/${TMPDIR}\"' directory." >&2
exit 4
fi
size_compressed="$( stat -c%s "${fname}${ext}" )"
if [ "$?" -ne "0" ]; then
echo "STAT ERROR!, 'stat -c%s \"${fname}${ext}\"' directory." >&2
exit 3
fi
ttime="$( echo "scale=16; x=${stop_t} - ${start_t}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
speed="$( getspeed "${start_t}" "${stop_t}" "${size}" )"
ratio="$( getratio "${size}" "${size_compressed}" )"
ratio_block="$( getratio_block "${size}" "${size_compressed}" )"
blocks="$( echo "scale=0; (${size}/${SIZE_OF_BLOCK})+1" | $BCCMD )"
blocks_compressed="$( echo "scale=0; (${size_compressed}/${SIZE_OF_BLOCK})+1" | $BCCMD )"
RES_SUM_time[$i]="$( echo "scale=16; x=${RES_SUM_time[$i]} + ${ttime}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
RES_SUM_size[$i]="$( echo "${RES_SUM_size[$i]} + ${size}" | $BCCMD )"
RES_SUM_size_compressed[$i]="$( echo "${RES_SUM_size_compressed[$i]} + ${size_compressed}" | $BCCMD )"
RES_SUM_block[$i]="$( echo "${RES_SUM_block[$i]} + ${blocks}" | $BCCMD )"
RES_SUM_block_compressed[$i]="$( echo "${RES_SUM_block_compressed[$i]} + ${blocks_compressed}" | $BCCMD )"
if [ "${LEAVE_COMP}" -eq "2" ]; then
if [ "${old_leave_file_size}" -gt "${size_compressed}" ]; then
leaveit=1
if [ -n "${old_leave_file_name}" ]; then
# ### --- dangerous command
rm "${old_leave_file_name}"
if [ "$?" -ne "0" ]; then
echo "RM ERROR!, 'rm \"${old_leave_file_name}\"' directory." >&2
exit 4
fi
fi
old_leave_file_name="./${fname}${ext}"
old_leave_file_size="${size_compressed}"
else
leaveit=0
fi
elif [ "${LEAVE_COMP}" -eq "1" ]; then
leaveit=1
else
leaveit=0
fi
if [ "${leaveit}" -eq "0" ]; then
# ### --- dangerous command
rm "./${fname}${ext}"
if [ "$?" -ne "0" ]; then
echo "RM ERROR!, 'rm \"./${fname}${ext}\"' directory." >&2
exit 4
fi
fi
if [ -f "${fname}" ]; then
# ### --- dangerous command
rm "./${fname}"
if [ "$?" -ne "0" ]; then
echo "RM ERROR!, 'rm \"./${fname}\"' directory." >&2
exit 4
fi
fi
if [ "$VERBOSE" -eq "1" ]; then
echo " Time: $( format_time "${ttime}" )"
echo " Speed: $( format_speed "${speed}" )"
echo " Size: $( format_size "${size}" ); blocks: ${blocks}"
echo " Compressed: $( format_size "${size_compressed}" ); blocks: ${blocks_compressed}"
echo " Ratio: $( format_ratio "${ratio}" )"
echo "Ratio block: $( format_ratio "${ratio_block}" )"
echo -e "--------------------------------------------\n"
fi
done
# ### --- dangerous command
if [ -n "${TAR_FILENAME}" ]; then
tr_cmd=
if [ "${RES_FILES_CNT}" -eq "0" ]; then
tr_cmd="${TAR_CMD[0]}"
else
tr_cmd="${TAR_CMD[1]}"
fi
${tr_cmd} "${TAR_FILENAME}" "$srcfile" 2>/dev/null
if [ "$?" -ne "0" ]; then
echo "TAR ERROR!, ' ${tr_cmd} \"${TAR_FILENAME}\" \"$srcfile\"." >&2
exit 4
fi
fi
RES_FILES_CNT=$(( RES_FILES_CNT + 1 ))
if [ "$VERBOSE" -eq "1" ]; then
echo -e "End file: '$srcfile'"
fi
}
cd "${TMP}"
if [ "$?" -ne "0" ]; then
echo "CD ERROR!, 'cd ${TMP}' directory." >&2
exit 3
fi
mkdir "${TMPDIR}"
if [ "$?" -ne "0" ]; then
echo "MKDIR ERROR!, 'mkdir \"${TMPDIR}\"' directory." >&2
exit 3
fi
cd "${TMPDIR}"
if [ "$?" -ne "0" ]; then
echo "CD ERROR!, 'cd \"${TMPDIR}\"' directory." >&2
exit 3
fi
# ------------------ save --------------------
function save(){
if [ -n "${SAVE_FILENAME}" ]; then
echo "# BEGIN $1 comptest.bash utility save file" > "${SAVE_FILENAME}"
echo "# SIZE OF BLOCK:" >> "${SAVE_FILENAME}"
echo "${SIZE_OF_BLOCK}" >> "${SAVE_FILENAME}"
echo "# TEST COUNT:" >> "${SAVE_FILENAME}"
echo "${TESTS_COUNT}" >> "${SAVE_FILENAME}"
echo "# TESTS ARRAY:" >> "${SAVE_FILENAME}"
echo "${TESTS[@]}" >> "${SAVE_FILENAME}"
echo "# TESTS RESULT COUNTS:" >> "${SAVE_FILENAME}"
echo "${RES_FILES_CNT}" >> "${SAVE_FILENAME}"
echo "# NO REGULAR FILES COUNTS:" >> "${SAVE_FILENAME}"
echo "${F_SKIPCNT}" >> "${SAVE_FILENAME}"
echo "# SUM TIME ARRAY:" >> "${SAVE_FILENAME}"
echo "${RES_SUM_time[@]}" >> "${SAVE_FILENAME}"
echo "# SUM SIZE ARRAY:" >> "${SAVE_FILENAME}"
echo "${RES_SUM_size[@]}" >> "${SAVE_FILENAME}"
echo "# SUM SIZE COMPRESSED ARRAY:" >> "${SAVE_FILENAME}"
echo "${RES_SUM_size_compressed[@]}" >> "${SAVE_FILENAME}"
echo "# SUM BLOCK COUNT ARRAY:" >> "${SAVE_FILENAME}"
echo "${RES_SUM_block[@]}" >> "${SAVE_FILENAME}"
echo "# SUM COMPRESSED BLOCK COUNT ARRAY:" >> "${SAVE_FILENAME}"
echo "${RES_SUM_block_compressed[@]}" >> "${SAVE_FILENAME}"
echo "# END $1 comptest.bash utility save file" >> "${SAVE_FILENAME}"
fi
}
# --------------------------------------------
breakit=0
function control_c(){
# echo "Interupting..."
if [ "${breakit}" -gt "0" ]; then
exit 3
fi
breakit=1
}
# ----- trap -------
trap control_c INT
#process all files -----------------------
if [ "${INPUTTYPE}" -eq "-2" ]; then
echo "Started -i, stdin file names"
while read file; do
if [ -f "$file" ]; then
processfile "$file"
else
F_SKIPCNT=$(( F_SKIPCNT + 1 ))
if [ "$VERBOSE" -eq "1" ]; then
echo "The file '$1' is not regular file"
fi
fi
if [ "${breakit}" -ne "0" ]; then
echo "Interupted…"
save 'interupted'
exit 3
else
save 'in progess'
fi
done
elif [ "${INPUTTYPE}" -eq "-1" ]; then
echo "Started -f, file names as parametrs"
while [ "$#" != "0" ]; do
if [ -f "$1" ]; then
processfile "$1"
else
F_SKIPCNT=$(( F_SKIPCNT + 1 ))
if [ "$VERBOSE" -eq "1" ]; then
echo "The file '$1' is not regular file"
fi
fi
if [ "${breakit}" -ne "0" ]; then
echo "Interupted…"
save 'interupted'
exit 3
else
save 'in progess'
fi
shift
done
elif [ "${INPUTTYPE}" -eq "-3" ]; then
echo "Started -o, read saved data"
i='0'
while read line; do
if [ "$i" -eq "2" ]; then
SIZE_OF_BLOCK="${line}"
elif [ "$i" -eq "4" ]; then
TESTS_COUNT="${line}"
elif [ "$i" -eq "6" ]; then
TESTS=( ${line} )
elif [ "$i" -eq "8" ]; then
RES_FILES_CNT="${line}"
elif [ "$i" -eq "10" ]; then
F_SKIPCNT="${line}"
elif [ "$i" -eq "12" ]; then
RES_SUM_time=( ${line} )
elif [ "$i" -eq "14" ]; then
RES_SUM_size=( ${line} )
elif [ "$i" -eq "16" ]; then
RES_SUM_size_compressed=( ${line} )
elif [ "$i" -eq "18" ]; then
RES_SUM_block=( ${line} )
elif [ "$i" -eq "20" ]; then
RES_SUM_block_compressed=( ${line} )
fi
i=$((i=i+1))
done < "${OPEN_FILENAME}"
RES_SUM_speed=()
RES_SUM_ratio=()
RES_SUM_ratio_block=()
for((i=0; i<${TESTS_COUNT}; i++)); do
RES_SUM_speed+=( '?' )
RES_SUM_ratio+=( '?' )
RES_SUM_ratio_block+=( '?' )
done
elif [ "${INPUTTYPE}" -eq "-4" ]; then
echo "Started -d, tar directory"
mkdir "${TMP}/${TMPDIR}/${TAR_TMP_DIR}"
if [ "$?" -ne "0" ]; then
echo "MKDIR ERROR!, 'mkdir \"${TMP}/${TMPDIR}/${TAR_TMP_DIR}\"' directory." >&2
exit 3
fi
while read dir; do
if [ -d "$dir" ]; then
drname="$( basename "$dir" )"
# ### --- hold tmp dir
cd "${TMP}/${TMPDIR}"
if [ "$?" -ne "0" ]; then
echo "CD ERROR!, 'cd \"${TMP}/${TMPDIR}\"' directory." >&2
exit 4
fi
tr_cmd="${TAR_CMD[0]}"
# ### --- dangerous command
${tr_cmd} "${TAR_TMP_DIR}/${drname}.tar" "$dir" 2>/dev/null
if [ "$?" -ne "0" ]; then
echo "TAR DIRECTORY ERROR!, '${tr_cmd} \"${TAR_TMP_DIR}/${drname}.tar\" \"$dir\"'." >&2
exit 3
fi
processfile "${TMP}/${TMPDIR}/${TAR_TMP_DIR}/${drname}.tar"
# ### --- hold tmp dir
cd "${TMP}/${TMPDIR}"
if [ "$?" -ne "0" ]; then
echo "CD ERROR!, 'cd \"${TMP}/${TMPDIR}\"' directory." >&2
exit 4
fi
# ### --- dangerous command
rm "./${TAR_TMP_DIR}/${drname}.tar"
if [ "$?" -ne "0" ]; then
echo "RM ERROR!, 'rm \"./${TAR_TMP_DIR}/${drname}.tar}\"'." >&2
exit 3
fi
else
F_SKIPCNT=$(( F_SKIPCNT + 1 ))
if [ "$VERBOSE" -eq "1" ]; then
echo "The file '$1' is not directory"
fi
fi
if [ "${breakit}" -ne "0" ]; then
echo "Interupted…"
save 'interupted'
exit 3
else
save 'in progess'
fi
shift
done
rmdir "${TMP}/${TMPDIR}/${TAR_TMP_DIR}"
if [ "$?" -ne "0" ]; then
echo "RMDIR ERROR!, 'rmdir \"${TMP}/${TMPDIR}/${TAR_TMP_DIR}\"' directory." >&2
exit 3
fi
else
echo "Type of input mismatch error." >&2
fi
# ------------------------------------------
# ------------------ save it -----------------
if [ "${breakit}" -eq "0" ]; then
save 'finished'
fi
# --------------------------------------------
#report -----------------------
EVOL_REF_PR=0.25
EVOL_LOWER_PR=0.05
EVOL_SAME_PR=0.005
EVOL_CHR=( '==' ' =' ' v' 'vv' '&&' )
CHR_LOW=' v'
CHR_LOW2='vv'
EVOL_UNLIM='99999999999999999999'
EVOL_LAST_VALUE="-${EVOL_UNLIM}"
EVOL_RES=''
EVOL_SIDE=0
function start_evolution() {
if [ "$1" -eq "0" ]; then
EVOL_LAST_VALUE="${EVOL_UNLIM}"
else
EVOL_LAST_VALUE="-${EVOL_UNLIM}"
fi
EVOL_SIDE=0
}
function evolution() {
if [ "$2" -eq "0" ]; then
r="$( echo "scale=2; x=${EVOL_LAST_VALUE} - $1; scale=0; r=4; if(x < (${EVOL_REF_PR}*${EVOL_LAST_VALUE})) r-=1; if(x < (${EVOL_LOWER_PR}*${EVOL_LAST_VALUE})) r-=1; if(x < (${EVOL_SAME_PR}*${EVOL_LAST_VALUE})) r-=1; if(x == 0) r=0; r" | $BCCMD )"
else
r="$( echo "scale=2; x=(${EVOL_LAST_VALUE} - $1)* -1; scale=0; r=4; if(x < (${EVOL_REF_PR}*${EVOL_LAST_VALUE})) r-=1; if(x < (${EVOL_LOWER_PR}*${EVOL_LAST_VALUE})) r-=1; if(x < (${EVOL_SAME_PR}*${EVOL_LAST_VALUE})) r-=1; if(x == 0) r=0; r" | $BCCMD )"
fi
if [ "$r" -eq "4" ]; then
EVOL_LAST_VALUE="$1"
if [ "${EVOL_SIDE}" -eq "0" ]; then
EVOL_SIDE=1
else
EVOL_SIDE=0
fi
fi
if [ "${EVOL_SIDE}" -eq "0" ]; then
EVOL_RES="|${EVOL_CHR[$r]} "
else
EVOL_RES=" ${EVOL_CHR[$r]}|"
fi
}
function width_itselfl(){
x="$1"
while [ ${#x} -lt "$2" ] ; do
x=" $x"
done
echo "$x"
}
function width_itselfr(){
x="$1"
while [ ${#x} -lt "$2" ]; do
x="$x "
done
echo "$x"
}
function gauge(){
x=""
if [ $# -gt "2" ]; then
if [ "$3" -gt "0" ]; then
x="<<<<<${line:3}"
width_itselfr "$x" "${2}"
else
while [ ${#x} -lt "$1" ]; do
x="$x#"
done
x="${x:0:$(($2-5))}>>>>>"
x="${GRAPH_POINT/\[letter\]/${x}}"
width_itselfr "$x" "$((${2}+${GRAPH_POINT_L}))"
fi
else
while [ ${#x} -lt "$1" ]; do
x="$x#"
done
x="${GRAPH_POINT/\[letter\]/${x}}"
width_itselfr "$x" "$((${2}+${GRAPH_POINT_L}))"
fi
}
function toaverage(){
if [ "$1" -eq "-1" ]; then
echo '-| '
else
echo ' |+'
fi
}
function toweightspeed(){
if [ "$1" -eq "-1" ]; then
echo 'slow| '
else
echo ' |fast'
fi
}
function toweightratio(){
if [ "$1" -eq "-1" ]; then
echo 'bad| '
else
echo ' |good'
fi
}
function nook(){
if [ "$1" -eq "1" ]; then
echo 'no| '
else
echo ' |OK'
fi
}
# ------ compute necessary values ----------
SUM_time='0'
SUM_size='0'
SUM_size_compressed='0'
TEST_INFO=()
TEST_SHORT_INFO=()
AVG_SPEED='0'
AVG_RATIO='0'
AVG_RATIO_BLOCK='0'
MIN_SPEED='99999999999999999999'
MIN_RATIO='99999999999999999999'
MIN_RATIO_BLOCK='99999999999999999999'
MAX_SPEED='0'
MAX_RATIO='0'
MAX_RATIO_BLOCK='0'
NAME_WIDTH=20
for((i=0; i<${TESTS_COUNT}; i++)); do
RES_SUM_speed[$i]="$( echo "scale=12; x=${RES_SUM_size[$i]}/${RES_SUM_time[$i]}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
AVG_SPEED="$( echo "scale=12; x=${AVG_SPEED} + ${RES_SUM_speed[$i]}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
MIN_SPEED="$( echo "scale=12; x=${RES_SUM_speed[$i]}; if(${MIN_SPEED}<x) x=${MIN_SPEED}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
MAX_SPEED="$( echo "scale=12; x=${RES_SUM_speed[$i]}; if(${MAX_SPEED}>x) x=${MAX_SPEED}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
RES_SUM_ratio[$i]="$( echo "scale=9; x=${RES_SUM_size_compressed[$i]}/${RES_SUM_size[$i]}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
AVG_RATIO="$( echo "scale=12; x=${AVG_RATIO} + ${RES_SUM_ratio[$i]}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
MIN_RATIO="$( echo "scale=12; x=${RES_SUM_ratio[$i]}; if(${MIN_RATIO}<x) x=${MIN_RATIO}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
MAX_RATIO="$( echo "scale=12; x=${RES_SUM_ratio[$i]}; if(${MAX_RATIO}>x) x=${MAX_RATIO}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
RES_SUM_ratio_block[$i]="$( echo "scale=9; x=${RES_SUM_block_compressed[$i]}/${RES_SUM_block[$i]}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
AVG_RATIO_BLOCK="$( echo "scale=12; x=${AVG_RATIO_BLOCK} + ${RES_SUM_ratio_block[$i]}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
MIN_RATIO_BLOCK="$( echo "scale=12; x=${RES_SUM_ratio_block[$i]}; if(${MIN_RATIO_BLOCK}<x) x=${MIN_RATIO_BLOCK}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
MAX_RATIO_BLOCK="$( echo "scale=12; x=${RES_SUM_ratio_block[$i]}; if(${MAX_RATIO_BLOCK}>x) x=${MAX_RATIO_BLOCK}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
SUM_time="$( echo "scale=12; x=${SUM_time} + ${RES_SUM_time[$i]}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
SUM_size="$( echo "scale=12; x=${SUM_size} + ${RES_SUM_size[$i]}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
SUM_size_compressed="$( echo "scale=12; x=${SUM_size_compressed} + ${RES_SUM_size_compressed[$i]}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
#create info
testi="${TESTS[$i]}"
#do not change '20' !
TEST_SHORT_INFO+=( "[ $(width_itselfr "${TXTA[$testi]}" ${NAME_WIDTH}) ]" )
str="${TEST_SHORT_INFO[$i]} S: $(width_itselfl "$( format_speed "${RES_SUM_speed[$i]}" 1 )" 14 ); R: $(width_itselfl "$( format_ratio "${RES_SUM_ratio[$i]}" 1 )" 8 ); RB: $(width_itselfl "$( format_ratio "${RES_SUM_ratio_block[$i]}" 1 )" 8 )"
TEST_INFO+=( "${str}" )
done
AVG_SPEED="$( echo "scale=9; x=${AVG_SPEED} / ${TESTS_COUNT}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
AVG_RATIO="$( echo "scale=9; x=${AVG_RATIO} / ${TESTS_COUNT}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
AVG_RATIO_BLOCK="$( echo "scale=9; x=${AVG_RATIO_BLOCK} / ${TESTS_COUNT}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
# --- sort results -------------------------
BUBBLE_DESC=0
bubble_sort "${RES_SUM_speed[@]}"
speed_index=(${BUBBLE_RES[@]})
BUBBLE_DESC=1
bubble_sort "${RES_SUM_ratio[@]}"
ratio_index=(${BUBBLE_RES[@]})
BUBBLE_DESC=1
bubble_sort "${RES_SUM_ratio_block[@]}"
ratio_index_block=(${BUBBLE_RES[@]})
#echo "${speed_index[@]}"
#echo "${ratio_index[@]}"
#echo "${ratio_index_block[@]}"
#echo "${RES_SUM_speed[@]}"
#echo "${RES_SUM_size[@]}"
#echo "${RES_SUM_size_compressed[@]}"
#echo "${RES_SUM_block[@]}"
#echo "${RES_SUM_block_compressed[@]}"
#echo "${RES_SUM_speed[@]}"
#echo "${RES_SUM_ratio[@]}"
#echo "${RES_SUM_ratio_block[@]}"
echo ''
echo '# SUMARRY ####################################################################'
echo "# Tested files: $(echo "x=${RES_FILES_CNT}; ${HLP_BC_FORMAT_DIGIT0} ${HLP_BC_FORMAT_OUT_NUMBER6INT}" | $BCCMD )"
echo "# Skipped no-regular files: $(echo "x=${F_SKIPCNT}; ${HLP_BC_FORMAT_DIGIT0} ${HLP_BC_FORMAT_OUT_NUMBER6INT}" | $BCCMD )"
echo "# Tested method count: $(echo "x=${TESTS_COUNT}; ${HLP_BC_FORMAT_DIGIT0} ${HLP_BC_FORMAT_OUT_NUMBER6INT}" | $BCCMD )"
echo '#-----------------------------------------------------------------------------'
echo "# All compression time: $( format_time "${SUM_time}" )"
echo "# All tested files size: $( format_size "${RES_SUM_size[0]}" ); blocks: ${RES_SUM_block[0]}"
echo "# All tested files blocks: $(echo "x=${RES_SUM_block[0]}; ${HLP_BC_FORMAT_DIGIT0} ${HLP_BC_FORMAT_OUT_NUMBER6INT}" | $BCCMD )"
block_size="$( echo "scale=9; x=${RES_SUM_block[0]}*(${SIZE_OF_BLOCK} + ${ADD_SIZE_TO_BLOCK}); ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
echo "# All tested files block size: $( format_size "${block_size}" )"
echo '#-----------------------------------------------------------------------------'
waitforkey
echo "# Average speed: $(width_itselfl "$( format_speed "${AVG_SPEED}" 0 )" 18)"
echo "# Average compress ratio: $(width_itselfl "$( format_ratio "${AVG_RATIO}" 1 )" 12)"
echo "# Average compress ratio block: $(width_itselfl "$( format_ratio "${AVG_RATIO_BLOCK}" 1 )" 12)"
echo '#-----------------------------------------------------------------------------'
echo "# Minimum speed: $(width_itselfl "$( format_speed "${MIN_SPEED}" 0 )" 18)"
echo "# Minimum compress ratio: $(width_itselfl "$( format_ratio "${MIN_RATIO}" 1 )" 12) (the best)"
echo "# Minimum compress ratio block: $(width_itselfl "$( format_ratio "${MIN_RATIO_BLOCK}" 1 )" 12) (the best)"
echo '#-----------------------------------------------------------------------------'
echo "# Maximum speed: $(width_itselfl "$( format_speed "${MAX_SPEED}" 0 )" 18)"
echo "# Maximum compress ratio: $(width_itselfl "$( format_ratio "${MAX_RATIO}" 1 )" 12) (the worst)"
echo "# Maximum compress ratio block: $(width_itselfl "$( format_ratio "${MAX_RATIO_BLOCK}" 1 )" 12) (the worst)"
echo '#-----------------------------------------------------------------------------'
echo "# All uncompressed read: $( format_size "${SUM_size}" )"
echo "# All compressed writes: $( format_size "${SUM_size_compressed}" )"
echo '##############################################################################'
waitforkey
GAUGEWIDTH=25
echo ''
echo '# ORDER BY SPEED ##################^^^^^^^####################################'
cnt="${#speed_index[@]}"
start_evolution 0
for((i=0; i<${cnt}; i++)); do
index="${speed_index[$i]}"
evolution "${RES_SUM_speed[$index]}" 0
echo "# ${EVOL_RES} ${TEST_INFO[$index]}"
done
echo '#-----------------------------------------------------------------------------'
waitforkey
int="$( echo "scale=12; x=${GAUGEWIDTH}/(${MAX_SPEED} - ${MIN_SPEED}); if(x<0.00000000001) x=0.00000000001; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
tmp_w="$( echo "scale=12; x=${REPORT_SPEED_W}*(${MAX_SPEED} - ${MIN_SPEED}) + ${MIN_SPEED}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
ww="$( echo "scale=12; x=${GAUGEWIDTH}*${REPORT_SPEED_W}; ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
rr="$( echo "scale=12; x=${REPORT_SPEED_W}*100; ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
a="$( echo "scale=12; x=-1; if(${tmp_w}>${AVG_SPEED}) x=1; x" | $BCCMD )"
w="$( echo "scale=12; x=${int}*(${AVG_SPEED} - ${MIN_SPEED}); ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
r="$( echo "scale=12; x=${w}/${GAUGEWIDTH}*100; ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
s="$( echo "scale=12; x=-1; if(${AVG_SPEED}>${tmp_w}) x=1; x" | $BCCMD )"
echo -e "# [ $(width_itselfr "Average speed" ${NAME_WIDTH} ) ] $(gauge "$w" "${GAUGEWIDTH}") $(width_itselfl $r 3) % &|& $(toweightspeed "$s")"
echo -e "# [ $(width_itselfr "Speed alimit -s $(echo "scale=3; x=${REPORT_SPEED_W}; ${HLP_BC_FORMAT_DIGIT2} ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD)" ${NAME_WIDTH} ) ] $(gauge "$ww" "${GAUGEWIDTH}") $(width_itselfl $rr 3) % $(toaverage "$a") &|&"
echo '# -------------------- |-------------------------| | | '
for((i=0; i<${cnt}; i++)); do
index="${speed_index[$i]}"
w="$( echo "scale=12; x=${int}*(${RES_SUM_speed[$index]} - ${MIN_SPEED}); ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
r="$( echo "scale=12; x=${w}/${GAUGEWIDTH}*100; ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
a="$( echo "scale=12; x=-1; if(${RES_SUM_speed[$index]}>${AVG_SPEED}) x=1; x" | $BCCMD )"
s="$( echo "scale=12; x=-1; if(${RES_SUM_speed[$index]}>${tmp_w}) x=1; x" | $BCCMD )"
echo -e "# ${TEST_SHORT_INFO[$index]} $(gauge "$w" "${GAUGEWIDTH}") $(width_itselfl $r 3) % $(toaverage "$a") $(toweightspeed "$s")"
done
echo '##############################################################################'
waitforkey
echo ''
echo '# ORDER BY COMPRESSED FILE SIZE #######################vvvvvv#################'
cnt="${#ratio_index[@]}"
start_evolution 1
for((i=0; i<${cnt}; i++)); do
index="${ratio_index[$i]}"
evolution "${RES_SUM_ratio[$index]}" 1
echo "# ${EVOL_RES} ${TEST_INFO[$index]}"
done
echo '#-----------------------------------------------------------------------------'
waitforkey
min="$( echo "scale=9; x=1 - ${MAX_RATIO}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
max="$( echo "scale=9; x=1 - ${MIN_RATIO}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
avg="$( echo "scale=9; x=1 - ${AVG_RATIO}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
int="$( echo "scale=9; x=${GAUGEWIDTH}/(${max} - ${min}); if(x<0.00000001) x=0.00000001; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
tmp_w="$( echo "scale=9; x=(${REPORT_RATIO_W}*(${max} - ${min}) + ${min}); ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
ww="$( echo "scale=9; x=${GAUGEWIDTH}*${REPORT_RATIO_W}; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )"
rr="$( echo "scale=9; x=${REPORT_RATIO_W}*100; ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
a="$( echo "scale=9; x=-1; if(${tmp_w}>(${avg})) x=1; x" | $BCCMD )"
w="$( echo "scale=9; x=${int}*(${avg} - ${min}); ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )"
r="$( echo "scale=9; x=${w}/${GAUGEWIDTH}*100; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )"
s="$( echo "scale=9; x=-1; if((${avg})>${tmp_w}) x=1; x" | $BCCMD )"
r_min="$( echo "scale=6; x=((${max} - ${min})/${GAUGEWIDTH}); if(x<0.000001) x=0.000001; x=((1 - ${REPORT_RATIO_MIN}) - ${min})/x; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )"
if [ "${r_min}" -lt "0" ]; then
g_lim="$(gauge "0" "${GAUGEWIDTH}" "1")"
g_rr=' <<<<'
elif [ "${r_min}" -gt "${GAUGEWIDTH}" ]; then
g_lim="$(gauge "${GAUGEWIDTH}" "${GAUGEWIDTH}" "0")"
g_rr=' >>>>'
else
g_lim="$(gauge "$r_min" "${GAUGEWIDTH}")"
g_rr="$( width_itselfl "$( echo "scale=6; x=${r_min}/${GAUGEWIDTH}*100; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )" 3 ) %"
fi
echo -e "# [ $(width_itselfr "Compress min -R $(echo "scale=3; x=${REPORT_RATIO_MIN}; ${HLP_BC_FORMAT_DIGIT2} ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD)" ${NAME_WIDTH} ) ] ${g_lim} ${g_rr} | | &|&"
yesno=$(echo "${AVG_RATIO}>=${REPORT_RATIO_MIN}" | $BCCMD)
echo -e "# [ $(width_itselfr "Average ratio" ${NAME_WIDTH} ) ] $(gauge "$w" "${GAUGEWIDTH}") $(width_itselfl $r 3) % &|& $(toweightratio "$s") $(nook "$yesno")"
echo -e "# [ $(width_itselfr "Ratio alimit -r $(echo "scale=3; x=${REPORT_RATIO_W}; ${HLP_BC_FORMAT_DIGIT2} ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD)" ${NAME_WIDTH} ) ] $(gauge "$ww" "${GAUGEWIDTH}") $(width_itselfl $rr 3) % $(toaverage "$a") &|& |"
echo '# -------------------- |-------------------------| | | |'
for((i=0; i<${cnt}; i++)); do
index="${ratio_index[$i]}"
yesno="$(echo "(${RES_SUM_ratio[$index]})>=${REPORT_RATIO_MIN}" | $BCCMD)"
w="$( echo "scale=9; x=${int}*((1 - ${RES_SUM_ratio[$index]}) - ${min}); ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
r="$( echo "scale=9; x=${w}/${GAUGEWIDTH}*100; ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
a="$( echo "scale=9; x=-1; if((1 - ${RES_SUM_ratio[$index]}>${avg})) x=1; x" | $BCCMD )"
s="$( echo "scale=9; x=-1; if((1 - ${RES_SUM_ratio[$index]}>${tmp_w})) x=1; x" | $BCCMD )"
echo -e "# ${TEST_SHORT_INFO[$index]} $(gauge "$w" "${GAUGEWIDTH}") $(width_itselfl $r 3) % $(toaverage "$a") $(toweightratio "$s") $(nook "$yesno")"
done
echo '##############################################################################'
waitforkey
echo ''
echo '# ORDER BY COMPRESSED FILE BLOCK COUNT ##############################vvvvvv###'
cnt="${#ratio_index_block[@]}"
start_evolution 1
for((i=0; i<${cnt}; i++)); do
index="${ratio_index_block[$i]}"
evolution "${RES_SUM_ratio_block[$index]}" 1
echo "# ${EVOL_RES} ${TEST_INFO[$index]}"
done
echo '#-----------------------------------------------------------------------------'
waitforkey
min="$( echo "scale=9; x=1 - ${MAX_RATIO_BLOCK}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
max="$( echo "scale=9; x=1 - ${MIN_RATIO_BLOCK}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
avg="$( echo "scale=9; x=1 - ${AVG_RATIO_BLOCK}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
int="$( echo "scale=9; y=${max} - ${min}; if(y < 0.00000001) y=0.00000001; x=${GAUGEWIDTH}/y; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
tmp_w="$( echo "scale=9; x=(${REPORT_RATIO_W}*(${max} - ${min}) + ${min}); ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
ww="$( echo "scale=9; x=${GAUGEWIDTH}*${REPORT_RATIO_W}; ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
rr="$( echo "scale=9; x=${REPORT_RATIO_W}*100; ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
a="$( echo "scale=9; x=-1; if(${tmp_w}>(${avg})) x=1; x" | $BCCMD )"
w="$( echo "scale=9; x=${int}*(${avg} - ${min}); ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
r="$( echo "scale=9; x=${w}/${GAUGEWIDTH}*100; ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
s="$( echo "scale=9; x=-1; if((${avg})>${tmp_w}) x=1; x" | $BCCMD )"
r_min="$( echo "scale=6; x=((${max} - ${min})/${GAUGEWIDTH}); if(x<0.000001) x=0.000001; x=((1 - ${REPORT_RATIO_MIN}) - ${min})/x; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )"
if [ "${r_min}" -lt "0" ]; then
g_lim="$(gauge "0" "${GAUGEWIDTH}" "1")"
g_rr=' <<<<'
elif [ "${r_min}" -gt "${GAUGEWIDTH}" ]; then
g_lim="$(gauge "${GAUGEWIDTH}" "${GAUGEWIDTH}" "0")"
g_rr=' >>>>'
else
g_lim="$(gauge "$r_min" "${GAUGEWIDTH}")"
g_rr="$( width_itselfl "$( echo "scale=6; x=${r_min}/${GAUGEWIDTH}*100; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )" 3 ) %"
fi
echo -e "# [ $(width_itselfr "Compress min -R $(echo "scale=3; x=${REPORT_RATIO_MIN}; ${HLP_BC_FORMAT_DIGIT2} ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD)" ${NAME_WIDTH} ) ] ${g_lim} ${g_rr} | | &|&"
yesno=$(echo "${AVG_RATIO_BLOCK}>=${REPORT_RATIO_MIN}" | $BCCMD)
echo -e "# [ $(width_itselfr "Average ratio block" ${NAME_WIDTH} ) ] $(gauge "$w" "${GAUGEWIDTH}") $(width_itselfl $r 3) % &|& $(toweightratio "$s") |"
echo -e "# [ $(width_itselfr "Ratio limit -r $(echo "scale=3; x=${REPORT_RATIO_W}; ${HLP_BC_FORMAT_DIGIT2} ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD)" ${NAME_WIDTH} ) ] $(gauge "$ww" "${GAUGEWIDTH}") $(width_itselfl $rr 3) % $(toaverage "$a") &|& |"
echo '# -------------------- |-------------------------| | | |'
for((i=0; i<${cnt}; i++)); do
index="${ratio_index_block[$i]}"
yesno="$(echo "(${RES_SUM_ratio_block[$index]})>=${REPORT_RATIO_MIN}" | $BCCMD)"
w="$( echo "scale=9; x=${int}*((1 - ${RES_SUM_ratio_block[$index]}) - ${min}); ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
r="$( echo "scale=9; x=${w}/${GAUGEWIDTH}*100; ${HLP_BC_FORMAT_DIGIT0}; x" | $BCCMD )"
a="$( echo "scale=9; x=-1; if((1 - ${RES_SUM_ratio_block[$index]}>${avg})) x=1; x" | $BCCMD )"
s="$( echo "scale=9; x=-1; if((1 - ${RES_SUM_ratio_block[$index]}>${tmp_w})) x=1; x" | $BCCMD )"
echo -e "# ${TEST_SHORT_INFO[$index]} $(gauge "$w" "${GAUGEWIDTH}") $(width_itselfl $r 3) % $(toaverage "$a") $(toweightratio "$s") $(nook "$yesno")"
done
echo '##############################################################################'
echo ''
if [ "$STOPIT" -eq "1" ]; then
echo "Next two wait for any key without message will be required."
fi
waitforkey
# ----- graph data -------------------------------------
grdata=()
grdata+=( '# | |' )
grdata+=( '# ^| |' )
grdata+=( '# ^| |' )
grdata+=( '# ^| |' )
grdata+=( '# | |' )
grdata+=( '# f| |' )
grdata+=( '# a| |' )
grdata+=( '# s| |' )
grdata+=( '# t| |' )
grdata+=( '# | |' )
grdata+=( '# s| |' )
grdata+=( '# p| |' )
grdata+=( '# e| |' )
grdata+=( '# e| |' )
grdata+=( '# d| |' )
grdata+=( '# | |' )
grdata+=( '# s| |' )
grdata+=( '# l| |' )
grdata+=( '# o| |' )
grdata+=( '# w| |' )
grdata+=( '# | |' )
grdata+=( '# v| |' )
grdata+=( '# v| |' )
grdata+=( '# v| |' )
grdata+=( '# | |' )
echo '# QUADRANT GRAPH RATIO (by filesize) #########################################'
min="$( echo "scale=9; x=1 - ${MAX_RATIO}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
max="$( echo "scale=9; x=1 - ${MIN_RATIO}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
min_block="$( echo "scale=9; x=1 - ${MAX_RATIO_BLOCK}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
max_block="$( echo "scale=9; x=1 - ${MIN_RATIO_BLOCK}; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
mingr_h="$(width_itselfl "$(format_ratio "${MAX_RATIO}" 1 )" 8)"
maxgr_h="$(width_itselfl "$(format_ratio "${MIN_RATIO}" 1 )" 8)"
TESTSID='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghuiklmnopqrstuvwxyz@#$%^&*()";.,'
MIDspeed="$( echo "scale=12; x=${MIN_SPEED}+(${MAX_SPEED} - ${MIN_SPEED} / 2); ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
MIDratio="$( echo "scale=12; x=${MIN_RATIO}+(${MAX_RATIO} - ${MIN_RATIO} / 2); ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
MIDratio_block="$( echo "scale=12; x=${MIN_RATIO_BLOCK}+(${MIN_RATIO_BLOCK} - ${MIN_RATIO_BLOCK} / 2); ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
SPEED_R="$( echo "scale=9; x=${MAX_SPEED} - ${MIN_SPEED}; if(x<0.001) x=0.001; ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
GR_POS=()
GR_POS_block=()
GR_val=()
GR_val_block=()
GR_W=72
GR_WM=5
GR_H=24
#-------- compute arrays for quadrant graphs
for((i=0; i<${TESTS_COUNT}; i++)); do
TESTSID_h="$( echo "scale=6; x=(${MAX_SPEED} - ${MIN_SPEED})/${GR_H}; if(x<0.000001) x=0.000001; x=(${RES_SUM_speed[$i]} - ${MIN_SPEED})/x; if(x < 0) x=0; y=${GR_H}; if(x > y) x=y; x=${GR_H}-x; x" | $BCCMD )"
TESTSID_v="$( echo "scale=6; x=((${max} - ${min})/${GR_W}); if(x<0.000001) x=0.000001; x=((1 - ${RES_SUM_ratio[$i]}) - ${min})/x; x=${GR_W}-x; if(x < 0) x=0; if(x > ${GR_W}) x=${GR_W}; x=${GR_W}-x + ${GR_WM}; x" | $BCCMD )"
w="$( echo "scale=6; x=(${GR_H} - ${TESTSID_h})*(${TESTSID_v}*(${GR_H}/${GR_W})); ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
TESTSID_h="$( echo "x=${TESTSID_h}; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )"
TESTSID_v="$( echo "x=${TESTSID_v}; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )"
GR_POS+=( "${TESTSID_h}" "${TESTSID_v}" "${TEST_INFO[$i]}" '?' )
GR_val+=( "$w" )
TESTSID_h="$( echo "scale=6; x=(${MAX_SPEED} - ${MIN_SPEED})/${GR_H}; if(x<0.000001) x=0.000001; x=(${RES_SUM_speed[$i]} - ${MIN_SPEED})/x; if(x < 0) x=0; y=${GR_H}; if(x > y) x=y; x=${GR_H}-x; x" | $BCCMD )"
TESTSID_v="$( echo "scale=6; x=((${max_block} - ${min_block})/${GR_W}); if(x<0.000001) x=0.000001; x=((1 - ${RES_SUM_ratio_block[$i]}) - ${min_block})/x; x=${GR_W}-x; if(x < 0) x=0; if(x > ${GR_W}) x=${GR_W}; x=${GR_W}-x + ${GR_WM}; x" | $BCCMD )"
w="$( echo "scale=6; x=(${GR_H} - ${TESTSID_h})*(${TESTSID_v}*(${GR_H}/${GR_W})); ${HLP_BC_FORMAT_OUT_NUMBER1}" | $BCCMD )"
TESTSID_h="$( echo "x=${TESTSID_h}; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )"
TESTSID_v="$( echo "x=${TESTSID_v}; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )"
GR_POS_block+=( "${TESTSID_h}" "${TESTSID_v}" "${TEST_INFO[$i]}" '?' )
GR_val_block+=( "$w" )
done
BUBBLE_DESC=0
bubble_sort "${GR_val[@]}"
GR_index=(${BUBBLE_RES[@]})
bubble_sort "${GR_val_block[@]}"
GR_index_block=(${BUBBLE_RES[@]})
TESTSID_i='0'
cnt=${#GR_index[@]}
for((i=0; i<${cnt}; i++)); do
index=$((${GR_index[$i]}*4))
TESTSID_h=${GR_POS[$(($index))]}
TESTSID_v=${GR_POS[$(($index+1))]}
ch=''
for((j=0; j<${i}; j++)); do
index_j=$((${GR_index[$j]}*4))
TESTSID_h2=${GR_POS[$(($index_j))]}
TESTSID_v2=${GR_POS[$(($index_j+1))]}
if [ "$TESTSID_h" -eq "$TESTSID_h2" -a "$TESTSID_v" -eq "$TESTSID_v2" ]; then
k="$(($index_j+3))"
ch="${GR_POS[$k]}"
fi
done
if [ -z "${ch}" ]; then
TESTSID_i="$((${TESTSID_i}+1))"
ch="${TESTSID:${TESTSID_i}:1}"
fi
k="$(($index+3))"
GR_POS[$k]="$ch"
done
TESTSID_i='0'
cnt=${#GR_index_block[@]}
for((i=0; i<${cnt}; i++)); do
index=$((${GR_index_block[$i]}*4))
TESTSID_h=${GR_POS_block[$(($index))]}
TESTSID_v=${GR_POS_block[$(($index+1))]}
ch=''
for((j=0; j<${i}; j++)); do
index_j=$((${GR_index_block[$j]}*4))
TESTSID_h2=${GR_POS_block[$(($index_j))]}
TESTSID_v2=${GR_POS_block[$(($index_j+1))]}
if [ "$TESTSID_h" -eq "$TESTSID_h2" -a "$TESTSID_v" -eq "$TESTSID_v2" ]; then
k="$(($index_j+3))"
ch="${GR_POS_block[$k]}"
fi
done
if [ -z "${ch}" ]; then
TESTSID_i="$((${TESTSID_i}+1))"
ch="${TESTSID:${TESTSID_i}:1}"
fi
k="$(($index+3))"
GR_POS_block[$k]="$ch"
done
grh="# <<< bad ${mingr_h} compression ratio ${maxgr_h} good >>> "
grh1="$grh"
waitforkey2
H_SPLIT="$( echo "scale=6; x=(1 - ${REPORT_SPEED_W})*${GR_H}; if(x < 0) x=0; y=${GR_H}; if(x > y) x=y; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )"
V_SPLIT="$( echo "scale=6; x=${REPORT_RATIO_W}*${GR_W}; y=${GR_W}; if(x < 0) x=0; if(x > ${GR_W}) x=${GR_W}; x=x + ${GR_WM}; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )"
V_MIN="$( echo "scale=6; x=((${MAX_RATIO} - ${MIN_RATIO})/${GR_W}); if(x<0.000001) x=0.000001; x=(${REPORT_RATIO_MIN} - ${MIN_RATIO})/x; x=${GR_W}-x; y=${GR_W}+1; if(x < -1) x=-1; if(x > y) x=y; x=x + ${GR_WM}; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )"
H_MIN="$( echo "scale=12; x=((${MAX_SPEED} - ${MIN_SPEED})/${GR_H}); if(x<0.000001) x=0.000001; x=(${REPORT_SPEED_MIN} - ${MIN_SPEED})/x; y=${GR_H}+1; if(x < -1) x=-1; if(x > y) x=y; x=${GR_H}-x; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD)"
#print graph
if [ "${V_MIN}" -eq "${V_SPLIT}" -o "${V_MIN}" -eq "$((${GR_WM}-1))" -o "${V_MIN}" -eq "$((${GR_W} + ${GR_WM}+1))" ]; then
pair=0
else
pair=2
fi
data=("${grdata[@]}")
#----- graph background with limits -----------------
function graphlines(){
if [ "${H_MIN}" -ge "${GR_H}" ]; then
grh="${grh// / ~~~~~~~ }"
elif [ "${H_MIN}" -le "-1" ]; then
grh1="${grh1// / ~~~~~~~ }"
else
line="${data[${H_MIN}]}"
line="${line// /~~~~~~~}"
line="${line// /~~~}"
data[${H_MIN}]="${line}"
fi
cnt=${#grdata[@]}
for((i=0; i<${cnt}; i++)); do
line="${data[$i]}"
if [ "$i" -eq "${H_SPLIT}" ]; then
if [ "${H_MIN}" -eq "${H_SPLIT}" ]; then
line="${line//~~~~~~~~/-~-~-~-~}"
line="${line//~~~~/-~-~}"
line="${line//~~/~-}"
else
line="${line// /-------}"
line="${line// /---}"
line="${line:0:$((${V_SPLIT}-1))}|${line:${V_SPLIT}}"
line="${line:0:$((${V_SPLIT}-1))}+${line:${V_SPLIT}}"
fi
else
line="${line:0:$((${V_SPLIT}-1))}|${line:${V_SPLIT}}"
fi
if [ "${pair}" -lt "2" ]; then
if [ "${pair}" -eq "0" ]; then
pair=1
line="${line:0:$((${V_MIN}-1))}:${line:${V_MIN}}"
else
pair=0
fi
else
line="${line:0:$((${V_MIN}-1))}:${line:${V_MIN}}"
fi
data[$i]="${line}"
done
}
graphlines
echo "$grh"
cnt=${#GR_index[@]}
for((i=0; i<${cnt}; i++)); do
index=$((${GR_index[$i]}*4))
ch="${GR_POS[$(($index+3))]}"
h=${GR_POS[$(($index))]}
v=${GR_POS[$(($index+1))]}
line="${data[$h]}"
line="${line:0:$(($v-1))}${ch}${line:$v}"
data[$h]="${line}"
done
cnt=${#grdata[@]}
for((i=0; i<${cnt}; i++)); do
if [ "$i" -eq "$((cnt-1))" ]; then
echo -n -e "${data[$i]}"
else
echo -e "${data[$i]}"
fi
done
waitforkey
echo ''
echo "$grh1"
echo '##############################################################################'
waitforkey
cnt=${#GR_index[@]}
for((i=0; i<${cnt}; i++)); do
index=$((${GR_index[$i]}*4))
ch="${GR_POS[$(($index+3))]}"
ch="$( width_itselfl "$ch" "2" )"
line="${GR_POS[$(($index+2))]}"
echo "${ch} - ${line}"
done
waitforkey
mingr_h="$(width_itselfl "$(format_ratio "${MAX_RATIO_BLOCK}" 1 )" 8)"
maxgr_h="$(width_itselfl "$(format_ratio "${MIN_RATIO_BLOCK}" 1 )" 8)"
echo '##############################################################################'
echo ''
echo '# QUADRANT GRAPH RATIO (by block count) ######################################'
grh="# <<< bad ${mingr_h} compression ratio ${maxgr_h} good >>> "
grh1="$grh"
waitforkey2
V_MIN="$( echo "scale=6; x=((${MAX_RATIO_BLOCK} - ${MIN_RATIO_BLOCK})/${GR_W}); if(x<0.000001) x=0.000001; x=(${REPORT_RATIO_MIN} - ${MIN_RATIO_BLOCK})/x; x=${GR_W}-x; y=${GR_W}+1; if(x < -1) x=-1; if(x > y) x=y; x=x + ${GR_WM}; ${HLP_BC_FORMAT_DIGIT0} x" | $BCCMD )"
if [ "${V_MIN}" -eq "${V_SPLIT}" -o "${V_MIN}" -eq "$((${GR_WM}-1))" -o "${V_MIN}" -eq "$((${GR_W} + ${GR_WM}+1))" ]; then
pair=0
else
pair=2
fi
data=("${grdata[@]}")
graphlines
echo "$grh"
cnt=${#GR_index_block[@]}
for((i=0; i<${cnt}; i++)); do
index=$((${GR_index_block[$i]}*4))
ch="${GR_POS_block[$(($index+3))]}"
h=${GR_POS_block[$(($index))]}
v=${GR_POS_block[$(($index+1))]}
line="${data[$h]}"
line="${line:0:$(($v-1))}${ch}${line:$v}"
data[$h]="${line}"
done
cnt=${#grdata[@]}
for((i=0; i<${cnt}; i++)); do
if [ "$i" -eq "$((cnt-1))" ]; then
echo -n -e "${data[$i]}"
else
echo -e "${data[$i]}"
fi
done
waitforkey
echo ''
echo "$grh1"
echo '##############################################################################'
waitforkey
cnt=${#GR_index_block[@]}
for((i=0; i<${cnt}; i++)); do
index=$((${GR_index_block[$i]}*4))
ch="${GR_POS_block[$(($index+3))]}"
ch="$( width_itselfl "$ch" "2" )"
line="${GR_POS_block[$(($index+2))]}"
echo "${ch} - ${line}"
done
echo '##############################################################################'
#clean -----------------------
if [ "${LEAVE_COMP}" -eq "0" ]; then
rmdir "${TMP}/${TMPDIR}"
if [ "$?" -ne "0" ]; then
echo "CLEAN ERROR!, error delete '${TMP}/${TMPDIR}' directory." >&2
exit 2
fi
else
echo ""
echo "Warning (info):"
echo " Temoprary directory '${TMP}/${TMPDIR}' contains compressed files."
fi
echo ""
exit 0
Běžné spuštení pro test souborů všemi metodami a jejich kombinacemi:find /absolute/path/dir -type f | ./comptest.bash -v -n 42 -w /absolute/path/to/save/dir/result.res -f
find /absolute/path/dir -mindepth 1 -maxdepth 1 -type d | ./comptest.bash -v -n 'e0 1 4' -w /absolute/path/to/save/dir/result.res -d
./comptest.bash -o /absolute/path/to/save/dir/result.res./comptest.bash -o -R 0.8 -S 8388608 /absolute/path/to/save/dir/result.res./comptest.bash -t /directory/to/save/ -T noexistsdirname -L -n allbest1 -f /full/file/path/nameecho /full/dir/path/name | ./comptest.bash -t /directory/to/save/ -T noexistsdirname -L -n allbest1 -d
kill <PID toho testu>, snad se to zestřelí až po skončení právě testovaného souboru - po všech vybraných kompresích.)# QUADRANT GRAPH RATIO (by block count) ###################################### # <<< bad 82.41 % compression ratio 74.80 % good >>> # | 1 : | | # ^| : | | # ^| : | | # ^| : | | # | : | | # f| : | | # a| : | | # s| : | | # t| : | | # | : | | # s| : | | # p| : | | # e|-----------------------:------------+------------------------------------| # e| : | | # d| : | | # | : | | # s| : | | # l|7 4 : | | # o| : | | # w|~~~~~~~~~~~~5~~~~~~~~~~:~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| # | 8 : | 2| # v| : | | # v| B : | 3 | # v| D 9 : | 6 | # | C : | A | # <<< bad 82.41 % compression ratio 74.80 % good >>> ############################################################################## 1 - [ gz -9 ] S: 9.49 MiB/sec; R: 81.09 %; RB: 81.09 % 2 - [ 7z.gz -txz -9 ] S: 3.65 MiB/sec; R: 74.80 %; RB: 74.80 % 3 - [ 7z ] S: 3.15 MiB/sec; R: 75.05 %; RB: 75.05 % 4 - [ gz.7z -txz -9 ] S: 4.39 MiB/sec; R: 80.41 %; RB: 80.41 % 5 - [ gz.bz2 -9 -9 ] S: 4.02 MiB/sec; R: 81.12 %; RB: 81.12 % 6 - [ 7z.bz2 -txz -9 ] S: 2.71 MiB/sec; R: 75.14 %; RB: 75.14 % 7 - [ bz2 -9 ] S: 4.40 MiB/sec; R: 82.41 %; RB: 82.41 % 8 - [ bz2.gz -9 -9 ] S: 3.71 MiB/sec; R: 82.34 %; RB: 82.34 % 9 - [ gz.bz2.7z -9 -9 -txz ] S: 2.79 MiB/sec; R: 81.12 %; RB: 81.12 % A - [ 7z.gz.bz2 -txz -9 -9 ] S: 2.54 MiB/sec; R: 75.15 %; RB: 75.15 % B - [ bz2.7z -9 -txz ] S: 2.95 MiB/sec; R: 82.33 %; RB: 82.33 % C - [ gz.7z.bz2 -9 -txz -9 ] S: 2.61 MiB/sec; R: 80.79 %; RB: 80.79 % D - [ bz2.gz.7z -9 -9 -txz ] S: 2.72 MiB/sec; R: 82.35 %; RB: 82.35 % D - [ bz2.7z.gz -9 -txz -9 ] S: 2.71 MiB/sec; R: 82.32 %; RB: 82.32 % A - [ 7z.bz2.gz -txz -9 -9 ] S: 2.47 MiB/sec; R: 75.14 %; RB: 75.14 % ##############################################################################Tady například velmi neefektivní stl data v ASCII verzi.
# QUADRANT GRAPH RATIO (by block count) ###################################### # <<< bad 15.06 % compression ratio 8.47 % good >>> # : 6 | | # ^| | | # ^:8 | | # ^| 5 | | # : | | # f| | | # a: | | # s| | | # t: | | # | | | # s: 3 | | # p| 1 | | # e:------------------------------------+------------------------------------| # e| | 2 | # d: | | # | | | # s: | 4 | # l| | | # o: | | # w| | | # : | | # v| | 7 | # v: | 9 | # v|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~~C~~~~~A~~~E~BD~~FG~~~~~~~~~~~| # : | H JI| # <<< bad 15.06 % compression ratio 8.47 % good >>> ############################################################################## 1 - [ gz -5 ] S: 33.05 MiB/sec; R: 11.95 %; RB: 12.04 % 2 - [ gz -6 ] S: 27.12 MiB/sec; R: 11.38 %; RB: 11.50 % 3 - [ gz -4 ] S: 35.60 MiB/sec; R: 12.82 %; RB: 12.91 % 4 - [ gz -7 ] S: 21.74 MiB/sec; R: 11.21 %; RB: 11.30 % 5 - [ gz -3 ] S: 51.91 MiB/sec; R: 13.99 %; RB: 14.06 % 6 - [ gz -2 ] S: 58.15 MiB/sec; R: 14.39 %; RB: 14.46 % 7 - [ gz -8 ] S: 9.84 MiB/sec; R: 10.96 %; RB: 11.03 % 8 - [ gz -1 ] S: 53.10 MiB/sec; R: 14.98 %; RB: 15.06 % 9 - [ gz.7z -txz -9 ] S: 7.31 MiB/sec; R: 10.96 %; RB: 11.03 % 9 - [ gz.bz2 -9 -9 ] S: 7.21 MiB/sec; R: 11.01 %; RB: 11.03 % 9 - [ gz -9 ] S: 6.51 MiB/sec; R: 10.95 %; RB: 11.03 % A - [ bz2 -1 ] S: 5.34 MiB/sec; R: 10.38 %; RB: 10.49 % 9 - [ gz.bz2.7z -9 -9 -txz ] S: 5.66 MiB/sec; R: 11.02 %; RB: 11.03 % B - [ bz2 -3 ] S: 4.91 MiB/sec; R: 9.84 %; RB: 9.95 % C - [ gz.7z.bz2 -9 -txz -9 ] S: 5.44 MiB/sec; R: 11.02 %; RB: 11.03 % D - [ bz2 -5 ] S: 4.62 MiB/sec; R: 9.73 %; RB: 9.82 % D - [ bz2 -4 ] S: 4.55 MiB/sec; R: 9.76 %; RB: 9.82 % E - [ bz2 -2 ] S: 4.70 MiB/sec; R: 10.02 %; RB: 10.15 % F - [ bz2 -7 ] S: 4.18 MiB/sec; R: 9.54 %; RB: 9.62 % G - [ bz2.gz -9 -9 ] S: 3.86 MiB/sec; R: 9.45 %; RB: 9.48 % G - [ bz2.7z -9 -txz ] S: 3.79 MiB/sec; R: 9.46 %; RB: 9.48 % F - [ bz2 -6 ] S: 3.77 MiB/sec; R: 9.56 %; RB: 9.62 % G - [ bz2 -9 ] S: 3.63 MiB/sec; R: 9.46 %; RB: 9.48 % G - [ bz2.7z.gz -9 -txz -9 ] S: 3.59 MiB/sec; R: 9.45 %; RB: 9.48 % F - [ bz2 -8 ] S: 3.49 MiB/sec; R: 9.55 %; RB: 9.62 % H - [ bz2.gz.7z -9 -9 -txz ] S: 3.15 MiB/sec; R: 9.45 %; RB: 9.48 % I - [ 7z.gz -txz -9 ] S: 2.87 MiB/sec; R: 8.40 %; RB: 8.47 % I - [ 7z ] S: 2.49 MiB/sec; R: 8.40 %; RB: 8.47 % J - [ 7z.bz2 -txz -9 ] S: 2.45 MiB/sec; R: 8.45 %; RB: 8.54 % J - [ 7z.bz2.gz -txz -9 -9 ] S: 2.43 MiB/sec; R: 8.45 %; RB: 8.54 % J - [ 7z.gz.bz2 -txz -9 -9 ] S: 2.15 MiB/sec; R: 8.46 %; RB: 8.54 % ##############################################################################Oproti stl v binárním formátu, kde 7z jasně vede (ne, že by na tom byl v předchozím nějak špatně, ale tak jasné to nebylo)
# QUADRANT GRAPH RATIO (by block count) ###################################### # <<< bad 38.67 % compression ratio 20.10 % good >>> # : 3 | | # ^| | | # ^: | | # ^| 2 | | # : | | # f| 5 | | # a: | | # s| 1 | | # t: | | # | | | # s: 4 | | # p| | | # e:------------------------------------+------------------------------------| # e| 6 | | # d: | | # | 7 | | # s: | | # l| | | # o: | | # w| 8 | | # :O I F | | # v| EG D 9 | | # v:~~~~~~~~JL~~K~~~~~~~~~~~~~~~~~~A~~B~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| # v| M C H | | # : | N| # <<< bad 38.67 % compression ratio 20.10 % good >>> ############################################################################## 1 - [ gz -4 ] S: 23.50 MiB/sec; R: 33.80 %; RB: 33.86 % 2 - [ gz -2 ] S: 28.88 MiB/sec; R: 35.27 %; RB: 35.33 % 3 - [ gz -1 ] S: 32.63 MiB/sec; R: 35.93 %; RB: 36.01 % 4 - [ gz -5 ] S: 19.94 MiB/sec; R: 33.49 %; RB: 33.56 % 5 - [ gz -3 ] S: 26.72 MiB/sec; R: 35.30 %; RB: 35.36 % 6 - [ gz -6 ] S: 16.11 MiB/sec; R: 33.46 %; RB: 33.51 % 7 - [ gz -7 ] S: 13.10 MiB/sec; R: 33.41 %; RB: 33.47 % 8 - [ gz -8 ] S: 7.69 MiB/sec; R: 33.31 %; RB: 33.39 % 9 - [ gz -9 ] S: 5.88 MiB/sec; R: 33.31 %; RB: 33.39 % A - [ gz.bz2 -9 -9 ] S: 4.33 MiB/sec; R: 30.61 %; RB: 30.71 % B - [ gz.7z -txz -9 ] S: 3.65 MiB/sec; R: 29.89 %; RB: 29.98 % C - [ gz.bz2.7z -9 -9 -txz ] S: 3.29 MiB/sec; R: 30.61 %; RB: 30.71 % D - [ bz2.gz -9 -9 ] S: 5.23 MiB/sec; R: 35.65 %; RB: 35.72 % E - [ bz2 -5 ] S: 5.86 MiB/sec; R: 36.49 %; RB: 36.55 % F - [ bz2 -4 ] S: 6.09 MiB/sec; R: 36.71 %; RB: 36.80 % E - [ bz2 -7 ] S: 5.67 MiB/sec; R: 36.42 %; RB: 36.50 % G - [ bz2 -8 ] S: 5.57 MiB/sec; R: 36.39 %; RB: 36.46 % F - [ bz2 -3 ] S: 6.17 MiB/sec; R: 36.94 %; RB: 36.99 % H - [ gz.7z.bz2 -9 -txz -9 ] S: 2.63 MiB/sec; R: 30.04 %; RB: 30.13 % I - [ bz2 -2 ] S: 6.09 MiB/sec; R: 37.63 %; RB: 37.66 % J - [ bz2 -6 ] S: 4.63 MiB/sec; R: 36.60 %; RB: 36.66 % K - [ bz2.7z.gz -9 -txz -9 ] S: 3.85 MiB/sec; R: 35.63 %; RB: 35.70 % L - [ bz2 -9 ] S: 4.30 MiB/sec; R: 36.30 %; RB: 36.38 % M - [ bz2.7z -9 -txz ] S: 3.28 MiB/sec; R: 35.65 %; RB: 35.74 % M - [ bz2.gz.7z -9 -9 -txz ] S: 3.25 MiB/sec; R: 35.65 %; RB: 35.72 % N - [ 7z.gz -txz -9 ] S: 1.80 MiB/sec; R: 20.00 %; RB: 20.10 % N - [ 7z ] S: 1.79 MiB/sec; R: 20.02 %; RB: 20.10 % O - [ bz2 -1 ] S: 6.07 MiB/sec; R: 38.63 %; RB: 38.67 % N - [ 7z.bz2 -txz -9 ] S: 1.64 MiB/sec; R: 20.11 %; RB: 20.21 % N - [ 7z.gz.bz2 -txz -9 -9 ] S: 1.57 MiB/sec; R: 20.11 %; RB: 20.21 % N - [ 7z.bz2.gz -txz -9 -9 ] S: 1.41 MiB/sec; R: 20.11 %; RB: 20.21 % ##############################################################################Oproti tomu jak se mu na specifických TIFF souborech až tak nedařilo (a na Jpeg souborech generoval decompresi místo comprese - zvětšoval filesy).
# QUADRANT GRAPH RATIO (by block count) ###################################### # <<< bad 82.40 % compression ratio 66.49 % good >>> # | B : | | # ^| A : | | # ^| 8 : | | # ^| : | | # | : | | # f| C : | | # a| E : | | # s| D : | | # t| F : | | # | : | | # s| : | | # p| : | | # e|-----------:------------------------+------------------------------------| # e| : | | # d| : | | # | : | | # s| : | | # l| : | 312| # o| : | 6 54| # w| : | 7 | # |~~H~~~~~~~~:~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| # v|I : | 9 | # v| : | | # v|K : | G | # | : | J | # <<< bad 82.40 % compression ratio 66.49 % good >>> ############################################################################## 1 - [ bz2 -3 ] S: 5.39 MiB/sec; R: 66.61 %; RB: 66.65 % 2 - [ bz2 -5 ] S: 5.27 MiB/sec; R: 66.51 %; RB: 66.53 % 3 - [ bz2 -2 ] S: 5.31 MiB/sec; R: 66.89 %; RB: 66.94 % 4 - [ bz2 -6 ] S: 5.11 MiB/sec; R: 66.49 %; RB: 66.52 % 4 - [ bz2 -4 ] S: 5.06 MiB/sec; R: 66.46 %; RB: 66.49 % 4 - [ bz2 -8 ] S: 4.98 MiB/sec; R: 66.54 %; RB: 66.58 % 5 - [ bz2 -9 ] S: 4.88 MiB/sec; R: 66.63 %; RB: 66.67 % 4 - [ bz2 -7 ] S: 4.80 MiB/sec; R: 66.53 %; RB: 66.57 % 6 - [ bz2 -1 ] S: 4.81 MiB/sec; R: 67.77 %; RB: 67.81 % 7 - [ bz2.gz -9 -9 ] S: 4.15 MiB/sec; R: 66.62 %; RB: 66.66 % 8 - [ gz -3 ] S: 14.64 MiB/sec; R: 80.95 %; RB: 80.98 % 9 - [ bz2.7z -9 -txz ] S: 3.34 MiB/sec; R: 66.63 %; RB: 66.68 % A - [ gz -2 ] S: 14.90 MiB/sec; R: 81.13 %; RB: 81.15 % 9 - [ bz2.7z.gz -9 -txz -9 ] S: 3.22 MiB/sec; R: 66.63 %; RB: 66.67 % B - [ gz -1 ] S: 15.52 MiB/sec; R: 81.38 %; RB: 81.42 % 9 - [ bz2.gz.7z -9 -9 -txz ] S: 3.07 MiB/sec; R: 66.63 %; RB: 66.67 % C - [ gz -5 ] S: 12.55 MiB/sec; R: 82.05 %; RB: 82.06 % D - [ gz -7 ] S: 11.44 MiB/sec; R: 82.01 %; RB: 82.05 % E - [ gz -4 ] S: 12.19 MiB/sec; R: 82.12 %; RB: 82.17 % F - [ gz -9 ] S: 11.10 MiB/sec; R: 82.00 %; RB: 82.03 % F - [ gz -6 ] S: 10.96 MiB/sec; R: 82.02 %; RB: 82.05 % F - [ gz -8 ] S: 10.78 MiB/sec; R: 82.01 %; RB: 82.04 % G - [ 7z ] S: 2.25 MiB/sec; R: 68.73 %; RB: 68.79 % G - [ 7z.gz -txz -9 ] S: 2.16 MiB/sec; R: 68.75 %; RB: 68.80 % H - [ gz.7z -txz -9 ] S: 3.99 MiB/sec; R: 82.01 %; RB: 82.03 % I - [ gz.bz2 -9 -9 ] S: 2.96 MiB/sec; R: 82.36 %; RB: 82.40 % J - [ 7z.gz.bz2 -txz -9 -9 ] S: 1.55 MiB/sec; R: 69.07 %; RB: 69.11 % J - [ 7z.bz2 -txz -9 ] S: 1.53 MiB/sec; R: 69.06 %; RB: 69.09 % K - [ gz.bz2.7z -9 -9 -txz ] S: 2.13 MiB/sec; R: 82.36 %; RB: 82.40 % K - [ gz.7z.bz2 -9 -txz -9 ] S: 2.02 MiB/sec; R: 82.36 %; RB: 82.40 % J - [ 7z.bz2.gz -txz -9 -9 ] S: 1.46 MiB/sec; R: 69.06 %; RB: 69.10 % ##############################################################################Ale zase na zdrojácích (c++)
# QUADRANT GRAPH RATIO (by block count) ###################################### # <<< bad 30.87 % compression ratio 17.80 % good >>> # :7 | | # ^| | | # ^: | | # ^| 6 | | # : | | # f| 4 | | # a: | | # s| 2 | | # t: | | # | 1 | | # s: | | # p| | | # e:------------------------------------+------------------------------------| # e| 3 | | # d: 5 | | # | | | # s: | | # l| | | # o: | | # w| 8 | | # : | | # v| | | # v:~~~~~~~~~~~~~~G~~~~~~~~B~~9ACD~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| # v| J KH EF | | # : M I | L| # <<< bad 30.87 % compression ratio 17.80 % good >>> ############################################################################## 1 - [ gz -5 ] S: 22.08 MiB/sec; R: 28.90 %; RB: 28.90 % 2 - [ gz -4 ] S: 25.01 MiB/sec; R: 29.39 %; RB: 29.39 % 3 - [ gz -6 ] S: 16.91 MiB/sec; R: 28.62 %; RB: 28.62 % 4 - [ gz -3 ] S: 26.84 MiB/sec; R: 29.94 %; RB: 29.95 % 5 - [ gz -7 ] S: 15.07 MiB/sec; R: 28.52 %; RB: 28.52 % 6 - [ gz -2 ] S: 30.40 MiB/sec; R: 30.40 %; RB: 30.40 % 7 - [ gz -1 ] S: 33.94 MiB/sec; R: 30.86 %; RB: 30.87 % 8 - [ gz -8 ] S: 8.39 MiB/sec; R: 28.37 %; RB: 28.37 % 9 - [ bz2 -2 ] S: 5.03 MiB/sec; R: 26.20 %; RB: 26.21 % A - [ bz2 -3 ] S: 4.70 MiB/sec; R: 26.00 %; RB: 26.00 % B - [ bz2 -1 ] S: 4.95 MiB/sec; R: 26.66 %; RB: 26.66 % C - [ bz2 -4 ] S: 4.39 MiB/sec; R: 25.86 %; RB: 25.86 % C - [ bz2 -5 ] S: 4.02 MiB/sec; R: 25.78 %; RB: 25.78 % D - [ bz2 -7 ] S: 3.93 MiB/sec; R: 25.63 %; RB: 25.63 % C - [ bz2 -6 ] S: 3.91 MiB/sec; R: 25.70 %; RB: 25.70 % E - [ bz2 -8 ] S: 3.77 MiB/sec; R: 25.60 %; RB: 25.60 % F - [ bz2.gz -9 -9 ] S: 3.22 MiB/sec; R: 25.44 %; RB: 25.44 % F - [ bz2 -9 ] S: 3.11 MiB/sec; R: 25.49 %; RB: 25.49 % G - [ gz -9 ] S: 4.00 MiB/sec; R: 28.33 %; RB: 28.33 % F - [ bz2.gz.7z -9 -9 -txz ] S: 2.51 MiB/sec; R: 25.44 %; RB: 25.44 % F - [ bz2.7z.gz -9 -txz -9 ] S: 2.49 MiB/sec; R: 25.44 %; RB: 25.44 % H - [ gz.7z -txz -9 ] S: 2.66 MiB/sec; R: 26.76 %; RB: 26.76 % I - [ bz2.7z -9 -txz ] S: 2.38 MiB/sec; R: 25.44 %; RB: 25.45 % J - [ gz.bz2 -9 -9 ] S: 2.85 MiB/sec; R: 28.31 %; RB: 28.32 % K - [ gz.7z.bz2 -9 -txz -9 ] S: 2.48 MiB/sec; R: 26.87 %; RB: 26.88 % L - [ 7z.gz -txz -9 ] S: 1.97 MiB/sec; R: 17.80 %; RB: 17.80 % L - [ 7z ] S: 1.90 MiB/sec; R: 17.84 %; RB: 17.84 % M - [ gz.bz2.7z -9 -9 -txz ] S: 2.22 MiB/sec; R: 28.31 %; RB: 28.32 % L - [ 7z.bz2 -txz -9 ] S: 1.83 MiB/sec; R: 17.88 %; RB: 17.88 % L - [ 7z.bz2.gz -txz -9 -9 ] S: 1.79 MiB/sec; R: 17.88 %; RB: 17.88 % L - [ 7z.gz.bz2 -txz -9 -9 ] S: 1.77 MiB/sec; R: 17.88 %; RB: 17.88 % ##############################################################################Jinak na VMWare adresáře virtuálních strojů je
7z i 10 % efektivnější než bz2 či gz.bc je vhodné dávat mezeru, protože XY=-5; echo "10-${XY}" | bc to nesežere.
Tiskni
Sdílej:
# QUADRANT GRAPH RATIO (by block count) ###################################### # <<< bad 28.33 % compression ratio 16.58 % good >>> # :2 | | # ^| | | # ^:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| # ^| | | # : | | # f| | | # a: | | # s| 1 | | # t: | | # | | | # s: | | # p| | | # e:------------------------------------+------------------------------------| # e| | | # d: | | # | | | # s: | | # l| | | # o: | | # w| | | # : | | # v| | | # v: | | # v| | | # : | 4 3| # <<< bad 28.33 % compression ratio 16.58 % good >>> ############################################################################## 1 - [ bz2 -9 ] S: 3.42 MiB/sec; R: 25.49 %; RB: 25.49 % 2 - [ gz -9 ] S: 4.27 MiB/sec; R: 28.33 %; RB: 28.33 % 3 - [ lrzip -L 9 ] S: 1.38 MiB/sec; R: 16.58 %; RB: 16.58 % 4 - [ rzip -9 ] S: 1.37 MiB/sec; R: 18.68 %; RB: 18.68 % ##############################################################################STL soubory (binární):
# QUADRANT GRAPH RATIO (by block count) ###################################### # <<< bad 36.38 % compression ratio 20.46 % good >>> # : 1 | | # ^| | | # ^: | | # ^|2 | | # : | | # f| | | # a: | | # s| | | # t: | | # | | | # s: | | # p| | | # e:------------------------------------+------------------------------------| # e|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| # d: | | # | | | # s: | | # l| | | # o: | | # w|3 | | # : | | # v| | | # v: | | # v| | | # : | 4| # <<< bad 36.38 % compression ratio 20.46 % good >>> ############################################################################## 1 - [ gz -9 ] S: 7.02 MiB/sec; R: 33.31 %; RB: 33.39 % 2 - [ bz2 -9 ] S: 6.28 MiB/sec; R: 36.30 %; RB: 36.38 % 3 - [ rzip -9 ] S: 2.52 MiB/sec; R: 36.26 %; RB: 36.34 % 4 - [ lrzip -L 9 ] S: 1.41 MiB/sec; R: 20.38 %; RB: 20.46 % ##############################################################################Virtuály zatím nemám :(, to chvíli trvá…
# QUADRANT GRAPH RATIO (by block count) ###################################### # <<< bad 40.37 % compression ratio 25.89 % good >>> # :3 | | # ^| | | # ^: | | # ^| | | # : | | # f| | | # a: | | # s| | | # t: | | # | 2 | | # s: | | # p| | | # e:------------------------------------+------------------------------------| # e| | | # d: | | # |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| # s: | | # l| | 1 | # o: | | # w| | | # : | | # v| | | # v: | | # v| | | # : | 4| # <<< bad 40.37 % compression ratio 25.89 % good >>> ############################################################################## 1 - [ rzip -9 ] S: 3.79 MiB/sec; R: 32.03 %; RB: 32.03 % 2 - [ bz2 -9 ] S: 4.79 MiB/sec; R: 38.55 %; RB: 38.55 % 3 - [ gz -9 ] S: 5.89 MiB/sec; R: 40.37 %; RB: 40.37 % 4 - [ lrzip -L 9 ] S: 2.95 MiB/sec; R: 25.89 %; RB: 25.89 % ##############################################################################
# QUADRANT GRAPH RATIO (by block count) ###################################### # <<< bad 100.25 % compression ratio 99.17 % good >>> # | | 1 : # ^| | | # ^| | 2 : # ^| | 4 | # | | 53 : # f| | | # a| | : # s| | 6 | # t| | : # | | 7 | # s| | : # p| | 8 | # e|------------------------------------+------------------------------------: # e| | | # d| | 9 : # | | | # s| | : # l| | | # o| | : # w|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| # | | H D C A : # v| M | E G B F| # v|O |LKI : # v| | N J| # | |PQ R : # <<< bad 100.25 % compression ratio 99.17 % good >>> ############################################################################## 1 - [ gz -3 ] S: 14.14 MiB/sec; R: 99.65 %; RB: 99.65 % 2 - [ gz -2 ] S: 13.27 MiB/sec; R: 99.65 %; RB: 99.65 % 3 - [ gz -1 ] S: 12.20 MiB/sec; R: 99.66 %; RB: 99.66 % 4 - [ gz -6 ] S: 12.32 MiB/sec; R: 99.68 %; RB: 99.67 % 5 - [ gz -8 ] S: 12.09 MiB/sec; R: 99.68 %; RB: 99.67 % 6 - [ gz -4 ] S: 10.59 MiB/sec; R: 99.68 %; RB: 99.67 % 7 - [ gz -9 ] S: 9.28 MiB/sec; R: 99.68 %; RB: 99.67 % 8 - [ gz -7 ] S: 8.23 MiB/sec; R: 99.68 %; RB: 99.67 % 9 - [ gz -5 ] S: 6.84 MiB/sec; R: 99.68 %; RB: 99.67 % A - [ bz2 -7 ] S: 3.62 MiB/sec; R: 99.25 %; RB: 99.25 % B - [ bz2 -8 ] S: 3.25 MiB/sec; R: 99.21 %; RB: 99.21 % C - [ bz2 -4 ] S: 3.50 MiB/sec; R: 99.42 %; RB: 99.42 % D - [ bz2 -3 ] S: 3.73 MiB/sec; R: 99.51 %; RB: 99.51 % E - [ bz2 -5 ] S: 3.19 MiB/sec; R: 99.36 %; RB: 99.36 % F - [ bz2 -9 ] S: 2.90 MiB/sec; R: 99.18 %; RB: 99.17 % F - [ bz2.gz -9 -9 ] S: 2.80 MiB/sec; R: 99.17 %; RB: 99.17 % G - [ bz2 -6 ] S: 2.85 MiB/sec; R: 99.30 %; RB: 99.30 % H - [ bz2 -2 ] S: 3.50 MiB/sec; R: 99.65 %; RB: 99.64 % I - [ gz.bz2 -9 -9 ] S: 2.71 MiB/sec; R: 99.68 %; RB: 99.67 % J - [ bz2.7z.gz -9 -txz -9 ] S: 2.17 MiB/sec; R: 99.18 %; RB: 99.18 % K - [ gz.7z -txz -9 ] S: 2.69 MiB/sec; R: 99.68 %; RB: 99.68 % L - [ 7z.gz -txz -9 ] S: 2.67 MiB/sec; R: 99.70 %; RB: 99.70 % M - [ bz2 -1 ] S: 3.29 MiB/sec; R: 99.92 %; RB: 99.92 % J - [ bz2.7z -9 -txz ] S: 2.07 MiB/sec; R: 99.18 %; RB: 99.18 % J - [ bz2.gz.7z -9 -9 -txz ] S: 1.97 MiB/sec; R: 99.18 %; RB: 99.18 % N - [ gz.bz2.7z -9 -9 -txz ] S: 1.86 MiB/sec; R: 99.68 %; RB: 99.68 % O - [ 7z ] S: 2.65 MiB/sec; R: 100.25 %; RB: 100.25 % P - [ 7z.gz.bz2 -txz -9 -9 ] S: 1.61 MiB/sec; R: 99.70 %; RB: 99.70 % Q - [ gz.7z.bz2 -9 -txz -9 ] S: 1.59 MiB/sec; R: 99.68 %; RB: 99.68 % R - [ 7z.bz2 -txz -9 ] S: 1.53 MiB/sec; R: 99.39 %; RB: 99.39 % R - [ 7z.bz2.gz -txz -9 -9 ] S: 1.48 MiB/sec; R: 99.39 %; RB: 99.39 % ##############################################################################7zip soubory zvětšuje
. Kdo nehrotí normy a netrápí ho pohoršené pohledy puristů, nemá problém
. Ale napsal bych v bashi.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.