#!/usr/bin/env ruby require 'yaml' core_order = [ "username", "fullname", "email", "groups", "pgp_keyid", "pgp_revoked_keyids", "ssh_keys", "extra" ] extra_order = [ "alias", "other_contact", "roles", "website", "occupation", "yob", "location", "languages", "interests", "favorite_distros" ] _core_order = Hash[[*core_order.map.with_index]] _extra_order = Hash[[*extra_order.map.with_index]] print YAML::load(STDIN) .sort_by{|u| u["username"]} .map{|u| Hash[u.sort_by{|k,v| _core_order[k]}]} .each{|u|u["extra"] = Hash[u["extra"].sort_by{|k,v| _extra_order[k]}] if u["extra"]} .to_yaml