Это работает для меня при минимальном тестировании:
#!/bin/zsh
typeset -A rule sidrev
while read -r line; do
sid=${${line/*sid:/}/;*/}
rev=${${line/*rev:/}/;*/}
if [[ "$rev" -gt "$sidrev[$sid]" ]]; then
sidrev[$sid]="$rev"
rule[$sid]="$line"
fi
done
echo -E ${(F)rule}
Сценарий считывает правила snort на стандартный ввод, а на стандартный вывод выводит последнюю версию всех прочитанных правил.