Нужно составить, список виртуалов. В базе есть отдельная таблица для этого, в одной из колонок хранится уникальное поле для идентификации пользователя, вроде IP, в другой ник. Остальные не важны.
Сейчас список первого вида получается примерно так:
#!/bin/bash
...
hash_list=$(s3query "$DB" "select ticket from bans" | sort | uniq)
for hash in $hash_list; do
users=$(s3query "$DB" "select user from bans where ticket='$hash'" | sort | uniq)
if [ "$(echo -e "$users" | wc -l)" -gt 1 ]; then
echo "$hash: $(echo $users)"
fi
done
Но оно будет отслеживать виртуалов только в пределах ticket, т.е. при ситуациях, когда в базе так:
user|ticket
--------------
user0|ticket1
user1|ticket1
user1|ticket2
user2|ticket2
ticket1: user0 user1
ticket2: user1 user2
ticket1 ticket2: user0 user1 user2