bashでのテキスト処理で１列目が同じ行の２列目を1つの行にまとめたい


bashを使って、１列目が同じ行の２列目を1つの行にまとめたいときどうすればよいですか？  
図で描くと

[code]

    a 1
    a 2
    a 3
    b 4
    c 5
    c 6
    d 7
    d 8
    e 9
    
[/code]

というテキストを

[code]

    a 1 2 3
    b 4
    c 5 6
    d 7 8
    e 9
    
[/code]

というふうに処理をしたいのです。お願いします。

追記  
テキストはすでにソートされたものです。結果はソートされていても、されていなくてもどちらで構いません。  
使っているbashのバージョンはversion 3.2.57です。

皆様の回答やコメントを受けて追記させていただきました。




質問通りbashで実装するのであれば対象のテキストが`a.txt`に格納されているとして

[code]

    unset -v HASH
    declare -A HASH
    while read k v; do HASH[$k]="${HASH[$k]} $v"; done < a.txt
    for k in ${!HASH[*]}; do echo $k ${HASH[$k]}; done
    
[/code]

でしょうか。Perl等、他のツールを使うのであればまた違ってくるとは思いますが。

