Есть несколько вариантов решения этой задачи. Предлагаю самый простой (но самый действенный и быстрый).
#!/bin/bash
cat myfile.txt | cut -d ':' -f 2 | sort > group.tmp
cat myfile.txt | cut -d ':' -f 3 | sort > user.tmp
paste group.tmp user.tmp > result.txt
Пару слов о том что происходит в скрипте.
Сначала, я создал файл myfile.txt на основе вашего образца:
пользователь:guest-группа:user
пользователь:admin-группа:guest
пользователь:user-группа:admin
Далее, через команду cat перенаправил содержимое в cut что бы выделить группу и юзера и сохранил вывод в двух временных файлах group.tmp и user.tmp
Так как имя пользователя является частью имени группы (guest-группа:user), то я отсортировал вывод в алфавитном порядке через sort.
Далее, осталось только соединить построчно оба временных файла, что я и сделал с помощью утилиты paste в файле result.txt
В итоге вывод моего скрипта будет таким:
admin-группа admin
guest-группа guest
user-группа user
Вроде, это то что вам нужно?
Если нужен иной подход - напишите, есть масса способов добиться такого же результата иначе.
P.S. если вам нужно слово "пользователь" вначале каждой строки, то достаточно добавить в скрипт sed конструкцию:
paste group.tmp user.tmp | sed s'/.*/пользователь:&/'g > result.txt
После чего финальная версия скрипта будет:
#!/bin/bash
cat myfile.txt | cut -d ':' -f 2 | sort > group.tmp
cat myfile.txt | cut -d ':' -f 3 | sort > user.tmp
paste group.tmp user.tmp | sed s'/.*/пользователь:&/'g > result.txt