第二回変なプログラマの作り方勉強会(つづき)
続き
標準入力またはファイルから、テキストデータを読み込み1行を1単位としてヒープソートします。入力行が\tまたは-sに指定した文字で複数のフィールドに区切られている場合、-fで優先フィールドを指定することが出来ます。
↓むちゃくちゃ横着な例
sh-3.2$ perl sortbase.pl -s ',' -f 2 1 3,5 4,4 5,3 ^D 5,3 4,4 3,5 sh-3.2$
このままではさすがに何の変哲もないので、せっかく作ったソートをなんかの役に立てようということを考えた。
ちょっと考えて、サザンのベスト盤をmp3にしたら、何回も「希望の轍」とか「勝手にシンドバット」とか流れてきてちょっと飽きが来るので、ソートを使って重複を抽出するということを思いついた。(ここで「ライブコーディングします」などと言いながら全く出来ずに撃沈、プレ終了・・・)
端末はLinuxなのでmp3のID3タグを抽出するコマンドをパイプでつないでタイトル毎にソートをかけることで重複している曲が分かるという格好。
この作業をする前に以下のツールをインストールしてください。
eyeD3 (参考:http://packages.debian.org/lenny/eyeD3)
ちなみにこのコマンド、実行すると以下のような感じになる。
sh-3.2$ eyeD3 --no-color mp3x/サザンオールスターズ/Ballad_3_\(The_Album_Of_Love\)_Disc_1/01.真夏の果実.mp3 01.真夏の果実.mp3 [ 7.75 MB ] ------------------------------------------------------------------------------- Time: 04:37 MPEG1, Layer III [ ~233 kb/s @ 44100 Hz - Joint stereo ] ------------------------------------------------------------------------------- ID3 v2.4: title: 真夏の果実 artist: サザンオールスターズ album: Ballad 3 (The Album Of Love) Disc 1 year: 2000 track: 1
アーティスト「サザンオールスターズ」のフォルダ以下すべてのmp3にeyeD3を実行し、ソートするワンライナー
find mp3x/サザンオールスターズ/ -name *.mp3 -exec eyeD3 --no-color {} \; | perl -e 'my ($a, $t); foreach (<>) { $a = $1 if $_=~/album: ([^\t]+)/; $t = $1 if $_=~/title: ([^\t]+)/; if ("$a" ne "" && "$t" ne "") { print "$a\t$t\n"; $a=""; $t=""; }}' | perl sortbase.pl -f 2 1
ソートしない出力
海のYeah!! [Disc 2] 恋のジャック・ナイフ 海のYeah!! [Disc 2] そんなヒロシに騙されて 海のYeah!! [Disc 2] YOU 海のYeah!! [Disc 2] 涙のキッス 海のYeah!! [Disc 2] あなただけを 〜Summer Heartbreak〜 海のYeah!! [Disc 2] 素敵なバーティー (NO NO BIRDY) 海のYeah!! [Disc 2] さよならベイビー 海のYeah!! [Disc 2] 平和の琉歌 海のYeah!! [Disc 2] 愛の言霊 〜Spiritual Message〜 海のYeah!! [Disc 2] マンピーのG★SPOT 海のYeah!! [Disc 2] MOON LIGHT LOVER 海のYeah!! [Disc 2] エロティカ・セブン 海のYeah!! [Disc 2] 太陽は罪な奴 海のYeah!! [Disc 2] シュラバ★ラ★バンバ 海のYeah!! [Disc 2] 真夏の果実 海のYeah!! DISC-1 SEA SIDE チャコの海岸物語 海のYeah!! DISC-1 SEA SIDE いとしのエリー 海のYeah!! DISC-1 SEA SIDE 鎌倉物語 海のYeah!! DISC-1 SEA SIDE ミス・ブランニュー・デイ (MISS BRAND-NEW DAY) 海のYeah!! DISC-1 SEA SIDE BYE BYE MY LOVE (U are the one) 海のYeah!! DISC-1 SEA SIDE 海 海のYeah!! DISC-1 SEA SIDE 勝手にシンドバッド 海のYeah!! DISC-1 SEA SIDE 匂艶 THE NIGHT CLUB 海のYeah!! DISC-1 SEA SIDE 忘れられた BIG WAVE 海のYeah!! DISC-1 SEA SIDE 栞のテーマ 海のYeah!! DISC-1 SEA SIDE 夏をあきらめて 海のYeah!! DISC-1 SEA SIDE 希望の轍 海のYeah!! DISC-1 SEA SIDE みんなのうた 海のYeah!! DISC-1 SEA SIDE いなせなロコモーション 海のYeah!! DISC-1 SEA SIDE C調言葉に御用心 Ballad 3 (The Album Of Love) Disc 1 希望の轍 Ballad 3 (The Album Of Love) Disc 1 素敵なバーディー(NO NO BIRDY) Ballad 3 (The Album Of Love) Disc 1 クリスマス・ラブ 〜涙のあとには白い雪が降る〜 Ballad 3 (The Album Of Love) Disc 1 OH, GIRL (悲しい胸のスクリーン) Ballad 3 (The Album Of Love) Disc 1 冷たい夏 Ballad 3 (The Album Of Love) Disc 1 慕情 Ballad 3 (The Album Of Love) Disc 1 涙のキッス Ballad 3 (The Album Of Love) Disc 1 BLUE HEAVEN Ballad 3 (The Album Of Love) Disc 1 忘れられたBIG WAVE Ballad 3 (The Album Of Love) Disc 1 さよならベイビー Ballad 3 (The Album Of Love) Disc 1 せつない胸に風が吹いてた Ballad 3 (The Album Of Love) Disc 1 HAIR Ballad 3 (The Album Of Love) Disc 1 逢いたくなった時に君はここにいない Ballad 3 (The Album Of Love) Disc 1 真夏の果実 Ballad 3 (The Album Of Love) Disc 2 Saudade〜真冬の蜃気楼〜 Ballad 3 (The Album Of Love) Disc 2 あなただけを〜Summer Heartbreak〜 Ballad 3 (The Album Of Love) Disc 2 SEA SIDE WOMAN BLUES Ballad 3 (The Album Of Love) Disc 2 Love Affair〜秘密のデート Ballad 3 (The Album Of Love) Disc 2 心を込めて花束を Ballad 3 (The Album Of Love) Disc 2 Moon Light Lover Ballad 3 (The Album Of Love) Disc 2 愛の言霊〜Spiritual Message〜 Ballad 3 (The Album Of Love) Disc 2 Tsunami Ballad 3 (The Album Of Love) Disc 2 夏の日のドラマ Ballad 3 (The Album Of Love) Disc 2 BLUE HEAVEN Ballad 3 (The Album Of Love) Disc 2 湘南 SEPTEMBER Ballad 3 (The Album Of Love) Disc 2 愛無き愛児〜Before the Storm〜 Ballad 3 (The Album Of Love) Disc 2 素敵な夢を叶えましょう Ballad 3 (The Album Of Love) Disc 2 唐人物語 (ラシャメンのうた)
ソート後の出力
Ballad 3 (The Album Of Love) Disc 1 BLUE HEAVEN Ballad 3 (The Album Of Love) Disc 2 BLUE HEAVEN 海のYeah!! DISC-1 SEA SIDE BYE BYE MY LOVE (U are the one) 海のYeah!! DISC-1 SEA SIDE C調言葉に御用心 Ballad 3 (The Album Of Love) Disc 1 HAIR Ballad 3 (The Album Of Love) Disc 2 Love Affair〜秘密のデート 海のYeah!! [Disc 2] MOON LIGHT LOVER Ballad 3 (The Album Of Love) Disc 2 Moon Light Lover Ballad 3 (The Album Of Love) Disc 1 OH, GIRL (悲しい胸のスクリーン) Ballad 3 (The Album Of Love) Disc 2 SEA SIDE WOMAN BLUES Ballad 3 (The Album Of Love) Disc 2 Saudade〜真冬の蜃気楼〜 Ballad 3 (The Album Of Love) Disc 2 Tsunami 海のYeah!! [Disc 2] YOU 海のYeah!! [Disc 2] あなただけを 〜Summer Heartbreak〜 Ballad 3 (The Album Of Love) Disc 2 あなただけを〜Summer Heartbreak〜 海のYeah!! DISC-1 SEA SIDE いとしのエリー 海のYeah!! DISC-1 SEA SIDE いなせなロコモーション Ballad 3 (The Album Of Love) Disc 1 さよならベイビー 海のYeah!! [Disc 2] さよならベイビー Ballad 3 (The Album Of Love) Disc 1 せつない胸に風が吹いてた 海のYeah!! [Disc 2] そんなヒロシに騙されて 海のYeah!! DISC-1 SEA SIDE みんなのうた 海のYeah!! [Disc 2] エロティカ・セブン Ballad 3 (The Album Of Love) Disc 1 クリスマス・ラブ 〜涙のあとには白い雪が降る〜 海のYeah!! [Disc 2] シュラバ★ラ★バンバ 海のYeah!! DISC-1 SEA SIDE チャコの海岸物語 海のYeah!! [Disc 2] マンピーのG★SPOT 海のYeah!! DISC-1 SEA SIDE ミス・ブランニュー・デイ (MISS BRAND-NEW DAY) Ballad 3 (The Album Of Love) Disc 1 冷たい夏 海のYeah!! DISC-1 SEA SIDE 勝手にシンドバッド 海のYeah!! DISC-1 SEA SIDE 匂艶 THE NIGHT CLUB Ballad 3 (The Album Of Love) Disc 2 唐人物語 (ラシャメンのうた) Ballad 3 (The Album Of Love) Disc 2 夏の日のドラマ 海のYeah!! DISC-1 SEA SIDE 夏をあきらめて 海のYeah!! [Disc 2] 太陽は罪な奴 Ballad 3 (The Album Of Love) Disc 1 希望の轍 海のYeah!! DISC-1 SEA SIDE 希望の轍 海のYeah!! [Disc 2] 平和の琉歌 Ballad 3 (The Album Of Love) Disc 2 心を込めて花束を 海のYeah!! DISC-1 SEA SIDE 忘れられた BIG WAVE Ballad 3 (The Album Of Love) Disc 1 忘れられたBIG WAVE 海のYeah!! [Disc 2] 恋のジャック・ナイフ 海のYeah!! [Disc 2] 愛の言霊 〜Spiritual Message〜 Ballad 3 (The Album Of Love) Disc 2 愛の言霊〜Spiritual Message〜 Ballad 3 (The Album Of Love) Disc 2 愛無き愛児〜Before the Storm〜 Ballad 3 (The Album Of Love) Disc 1 慕情 海のYeah!! DISC-1 SEA SIDE 栞のテーマ 海のYeah!! DISC-1 SEA SIDE 海 Ballad 3 (The Album Of Love) Disc 1 涙のキッス 海のYeah!! [Disc 2] 涙のキッス Ballad 3 (The Album Of Love) Disc 2 湘南 SEPTEMBER Ballad 3 (The Album Of Love) Disc 1 真夏の果実 海のYeah!! [Disc 2] 真夏の果実 海のYeah!! [Disc 2] 素敵なバーティー (NO NO BIRDY) Ballad 3 (The Album Of Love) Disc 1 素敵なバーディー(NO NO BIRDY) Ballad 3 (The Album Of Love) Disc 2 素敵な夢を叶えましょう Ballad 3 (The Album Of Love) Disc 1 逢いたくなった時に君はここにいない 海のYeah!! DISC-1 SEA SIDE 鎌倉物語
ってことで、勝手にシンドバットは一回しかでなかったですね。
コレを使えばとりあえず余分なMP3の整理にはなると思います。
眠いので続きはまた気が向けば後日っ!