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