データをある列をキーにまとめる方法

今やっている仕事で、以下のようなデータを

主キー 並び順 親コード
100 07 p00
101 02 p00
102 01 p01
103 06 p02
104 05 p02
105 03 p02
106 10 p03
107 04 p04
108 09 p05
109 08 p05

以下のようにしたい場面がありました。

親コード 主キーをまとめたもの
p00 101、100
p01 102
p02 105、104、103
p03 106
p04 107
p05 109、108

親コードでグルーピングして、並び順で並び替えたあとに、主キーを「、」で連結します。
Oracle でそんなクエリがあったような気もしますが、ここは男らしく(?)awk でやってみました。

まず元のデータを org.dat として保存。
以下のコマンドを発行。

sort -k2,1 org.dat | awk 'BEGIN {\
 previous = "";
}
{
 if (previous != "" && previous != $3) {
  printf("%s\t%s\n", previous, nameList);
  nameList = "";
 }
 if (nameList != "") {
  nameList = nameList "、";
 }
 nameList = nameList $1;
 previous = $3;
}
END {
  printf("%s\t%s\n", previous, nameList);
}'

まず sort で親キー、並び順で並び替え、awk でもげもげしています。
今更ながら、awk って繰り返し処理なのに for 文を書かないで良いという。
便利だな~