Идиоматический ответ awk:
$ awk -F', ' '!seen[$1>$2 ? $1 FS $2 : $2 FS $1]++' file
alice, bob
bob, cat
cat, dennis
dennis, alice
Общий подход для любого количества полей состоит в том, чтобы отсортировать их и использовать отсортированный список в качестве индекса для visible[].