Singularity je rootkit ve formě jaderného modulu (Linux Kernel Module), s otevřeným zdrojovým kódem dostupným pod licencí MIT. Tento rootkit je určený pro moderní linuxová jádra 6.x a poskytuje své 'komplexní skryté funkce' prostřednictvím hookingu systémových volání pomocí ftrace. Pro nadšence je k dispozici podrobnější popis rootkitu na blogu autora, případně v článku na LWN.net. Projekt je zamýšlen jako pomůcka pro bezpečnostní experty a výzkumníky, takže instalujte pouze na vlastní nebezpečí a raději pouze do vlastních strojů 😉.
Iconify je seznam a galerie kolekcí vektorových open-source ikon, ke stažení je přes 275000 ikon z více jak dvou set sad. Tento rovněž open-source projekt dává vývojářům k dispozici i API pro snadnou integraci svobodných ikon do jejich projektů.
Dle plánu certifikační autorita Let's Encrypt nově vydává také certifikáty s šestidenní platností (160 hodin) s možností vystavit je na IP adresu.
V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Forgejo byla vydána ve verzi 14.0 (Mastodon). Forgejo je fork Gitei.
Just the Browser je projekt, 'který vám pomůže v internetovém prohlížeči deaktivovat funkce umělé inteligence, telemetrii, sponzorovaný obsah, integraci produktů a další nepříjemnosti' (repozitář na GitHubu). Využívá k tomu skrytá nastavení ve webových prohlížečích, určená původně pro firmy a organizace ('enterprise policies'). Pod linuxem je skriptem pro automatickou úpravu nastavení prozatím podporován pouze prohlížeč Firefox.
Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.18. Díky 174 přispěvatelům.
Miliardy korun na digitalizaci služeb státu nestačily. Stát do ní v letech 2020 až 2024 vložil víc než 50 miliard korun, ale původní cíl se nepodařilo splnit. Od loňského února měly být služby státu plně digitalizované a občané měli mít právo komunikovat se státem digitálně. Do tohoto data se povedlo plně digitalizovat 18 procent agendových služeb státu. Dnes to uvedl Nejvyšší kontrolní úřad (NKÚ) v souhrnné zprávě o stavu digitalizace v Česku. Zpráva vychází z výsledků víc než 50 kontrol, které NKÚ v posledních pěti letech v tomto oboru uskutečnil.
Nadace Wikimedia, která je provozovatelem internetové encyklopedie Wikipedia, oznámila u příležitosti 25. výročí vzniku encyklopedie nové licenční dohody s firmami vyvíjejícími umělou inteligenci (AI). Mezi partnery encyklopedie tak nově patří Microsoft, Amazon a Meta Platforms, ale také start-up Perplexity a francouzská společnost Mistral AI. Wikimedia má podobnou dohodu od roku 2022 také se společností Google ze skupiny
… více »D7VK byl vydán ve verzi 1.2. Jedná se o fork DXVK implementující překlad volání Direct3D 5, 6 a 7 na Vulkan. DXVK zvládá Direct3D 8, 9, 10 a 11.
Byla vydána verze 12.0.0 knihovny libvirt (Wikipedie) zastřešující různé virtualizační technologie a vytvářející jednotné rozhraní pro správu virtuálních strojů. Současně byl ve verzi 12.0.0 vydán související modul pro Python libvirt-python. Přehled novinek v poznámkách k vydání.
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.