#!/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 svg; \ set output 'results.svg'; \ plot for [col=2:$((${#ALGS[@]}+1))] 'results.csv' using 1:col with lines title columnheader" fi