単調データを各圧縮コマンドで圧縮した時のファイルサイズを比べてみます。
オール0のデータとランダムなデータを元データとします。
gzip bzip2 xz zip rar 7z
の各コマンドを比較します。
rar zip 7zのインストールは、aptでいけます。
takk@deb8:~$ sudo apt-get install rar zip 7z
元ファイルを削除しないようにするオプションを使います。それぞれ以下のコマンドです。
bzip2 -k infile gzip -c infile > outfile.gz xz -k infile zip -1 outfile.zip infile rar a outfile.rar infile 7z a outfile.7z 1b
使用するデータは、ゼロデータです。生成する関数を用意しておきます。
takk@deb8:~$ function z(){ > seq $1 | perl -ne "print chr 0" > $1 > } takk@deb8:~$
1バイトデータから、1024バイトデータまで作成して、それぞれの圧縮後のファイルサイズを表にしてresultファイルに保存します。
takk@deb8:~$ for i in {1..1024};do create0 $i; > gzip -c $i > $i.gz; > bzip2 -k $i; > xz -k $i; > zip -1 $i.zip $i >/dev/null; > rar a $i.rar $i >/dev/null; > 7z a $i.7z $i >/dev/null; > stat -c'%s' $i $i.gz $i.bz2 $i.xz $i.zip $i.rar $i.7z|xargs; > done > result
このようなデータができました。
左から、0データファイルのサイズ gz bz2 xz zip rar 7zです。
takk@deb8:~$ cat result 1 23 37 60 153 68 104 2 24 37 60 154 68 105 3 25 37 60 155 71 105 4 26 37 60 156 71 105 (省略) 1021 34 41 76 171 81 117 1022 34 42 76 171 81 117 1023 34 42 76 171 81 117 1024 34 42 76 171 81 117
gzの圧勝です。
ランダムなデータでも試してみます。
takk@deb8:~$ function createrand(){ > seq $1 | perl -ne 'print chr int rand 256' > $1 > } takk@deb8:~$
結果です。
takk@deb8:~$ cat result 1 23 37 60 153 69 104 2 24 39 60 154 71 105 3 25 42 60 155 72 106 4 26 46 60 156 75 107 (省略) 1021 1049 1329 1084 1179 1143 1153 1022 1050 1311 1084 1180 1145 1153 1023 1051 1285 1084 1181 1149 1152 1024 1052 1335 1084 1182 1146 1154
極端ですが、このように単調過ぎるデータや、複雑過ぎるデータは、gzipが断然効率が良さそうです。
コメント