#!/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
|