Формат данных конечно просто ублюдочный.
Сперва соберём нормальный массив объектов вместо этого позорища:
const arr = Object
  .entries(obj)
  .reduce((acc, [ k, v ]) => (
    k = k.match(/([a-z]+)(\d+$)/),
    (acc[k[2]] ??= {})[k[1]] = v,
    acc
  ), []);
Затем посчитаем, у кого чего сколько:
const os = Object.fromEntries(arr.map(n => [ n.system, 0 ]));
const count = arr.reduce((acc, n) => ((acc[n.name] ??= { ...os })[n.system]++, acc), {});
Ну и выведем результаты:
console.log(Object
  .entries(count)
  .map(n => `${n[0]}: ${Object.entries(n[1]).map(m => m.join(' - ')).join(', ')}`)
  .join('\n')
);