mirror of https://github.com/Chizi123/Scripts.git

Joel Grunbaum
2020-05-19 107e6585331e9494b0e3cb689c209a2516eb3c3e
Compression benchmark script, easily expandable
1 files added
123 ■■■■■ changed files
compression_bench.sh 123 ●●●●● patch | view | raw | blame | history
compression_bench.sh
New file
@@ -0,0 +1,123 @@
#!/bin/bash
function test-comp() {
    #compress file
    $1 -$2 -c test.tar > "test.$2.$3" 2>/dev/null
    #write file size to temp file for csv formation
    printf "$(wc -c test.$2.$3 | awk '{print $1}')\n" >> $3
    #remove file
    rm -f "test.$2.$3"
}
function test-bzip2() {
    rm -f "bz2"
    for i in {1..9}; do
        test-comp bzip2 $i "bz2"
    done
}
function test-gzip() {
    rm -f "gz"
    for i in {1..9}; do
        test-comp gzip $i "gz"
    done
}
function test-lz4() {
    rm -f "lz4"
    for i in {1..12}; do
        test-comp lz4 $i "lz4"
    done
}
function test-xz() {
    rm -f "xz"
    for i in {1..9}; do
        test-comp xz $i "xz"
    done
}
function test-xz-e() {
    rm -f "xze"
    for i in {1..9}; do
        test-comp "xz -e" $i "xze"
    done
}
function test-lzma() {
    rm -f "lzma"
    for i in {1..9}; do
        test-comp lzma $i "lzma"
    done
}
function test-lzma-e() {
    rm -f "lzmae"
    for i in {1..9}; do
        test-comp "lzma -e" $i "lzmae"
    done
}
function test-zstd() {
    rm -f "zst"
    for i in {1..19}; do
        test-comp zstd $i "zst"
    done
    for i in {20..22}; do
        test-comp "zstd --ultra" $i "zst"
    done
}
if [ -z $1 ]; then
    echo "Usage: $0 FILES"
    exit
fi
# create a tar file to deal with directories
tar -cf test.tar "$@"
# run tests with all algorithms/programs
rm -f results.csv
ALGS=(bzip2 gzip lz4 xz xz-e lzma lzma-e zstd)
for i in ${ALGS[*]}; do
    test-$i
done
rm -f test.tar
# create csv with vertical columns
ALG_RES=`find . -maxdepth 1 -not -name '*.*' -type f`
printf "level" >> results.csv
for i in ${ALG_RES[*]}; do
    printf ",%s" $(echo $i | sed 's/\.\///') >> results.csv
done
printf "\n" >> results.csv
for i in {1..22}; do
    printf "$i" >> results.csv
    for j in $ALG_RES; do
        k=1;
        FOUND=0;
        while read LINE; do
            if [ $k == $i ]; then
                printf ",$LINE" >> results.csv
                FOUND=1
                break
            fi
            k=$((k+1))
        done < $j
        [ $FOUND == 0 ] && printf "," >> results.csv
    done
    printf "\n" >> results.csv
done
for i in ${ALG_RES[*]}; do
    rm -f $i
done
# generate plot using gnuplot
read -p "Generate plot? Y/n " PLOT
if [[ -z $PLOT || $PLOT == "y" || $PLOT == "Y" ]]; then
    gnuplot -e "set datafile separator \",\"; \
                set term png; \
                set output 'results.png'; \
                plot for [col=2:$((${#ALGS[@]}+1))] 'results.csv' using 1:col with lines title columnheader"
fi