アニメ『アキンド星のリトル・ペソ』
商売上手は無駄遣いもしません。損と得を常に意識して商売できるようになりたいです。
bzip2で圧縮するのはどのぐらいのサイズからが良いのか、テストファイルを作ってbzip2圧縮させながら確認したいと思います。
まずは、1バイトのファイル。当然bzip2をかけるとサイズが大きくなります。
takk@deb8:~$ echo -ne "\x0" > 1b takk@deb8:~$ bzip2 1b takk@deb8:~$ ls -l 1b.bz2 -rw-r--r-- 1 takk takk 37 4月 28 11:45 1b.bz2 takk@deb8:~$
次は、先ほど1バイトのファイルを圧縮したら37バイトになりましたので、37バイトのファイルをbzip2してみます。
内容は全部0です。
takk@deb8:~$ seq 37 | perl -ne "print chr 0" > 37b takk@deb8:~$ bzip2 37b takk@deb8:~$ ls -l 37b.bz2 -rw-r--r-- 1 takk takk 39 4月 28 11:51 37b.bz2 takk@deb8:~$
39バイトになりました。
では39バイトのデータで同じように試します。
takk@deb8:~$ seq 39 | perl -ne "print chr 0" > 39b takk@deb8:~$ bzip2 39b takk@deb8:~$ ls -l 39b.bz2 -rw-r--r-- 1 takk takk 39 4月 28 11:56 39b.bz2 takk@deb8:~$
同じサイズですね。
ではもっと大きくしてみます。きりのよい255バイトぐらいで。
takk@deb8:~$ seq 255 | perl -ne "print chr 0" > 255b takk@deb8:~$ bzip2 255b takk@deb8:~$ ls -l 255b.bz2 -rw-r--r-- 1 takk takk 39 4月 28 12:00 255b.bz2 takk@deb8:~$
これも同じサイズでした。次は512バイトでやってみます。
takk@deb8:~$ seq 512 | perl -ne "print chr 0" > 512b takk@deb8:~$ bzip2 512b takk@deb8:~$ wc -c 512b.bz2 41 512b.bz2 takk@deb8:~$
サイズが少し大きくなりました。どこからサイズが変化するのでしょうか。
手動でやると面倒なので、for文で大量生産してみます。
まず関数作成。
takk@deb8:~$ function create0(){ > seq $1 | perl -ne "print chr 0" > $1b > } takk@deb8:~$
各サイズのデータを生成して圧縮した結果をresultファイルに収めます。
takk@deb8:~$ for i in {39..512};do create0 $i && bzip2 ${i}b;wc -c ${i}b.bz2>>result;done takk@deb8:~$
このような結果ができました。
takk@deb8:~$ head result 39 39b.bz2 39 40b.bz2 39 41b.bz2 39 42b.bz2 39 43b.bz2 39 44b.bz2 39 45b.bz2 39 46b.bz2 39 47b.bz2 39 48b.bz2 takk@deb8:~$
変化するファイルを特定してみます。
takk@deb8:~$ awk 'BEGIN{pre=""}{if($1 != pre){print $0}pre=$1}' result 39 39b.bz2 40 259b.bz2 41 260b.bz2 43 275b.bz2 41 499b.bz2 takk@deb8:~$
サイズが増えるばかりじゃないんですね。
コメント