Вот общий способ с последними версиями GNU awk:
gawk -i join '
{
split($0, F, //)
asort(F)
h[join(F, 1, length(F), SUBSEP)]++
}
END {
asorti(h, x)
for(k in h)
print h[k], k
}' infile
Или как отдельный скрипт:
order.awk
@include "join"
{
split($0, F, //)
asort(F)
h[join(F, 1, length(F), SUBSEP)]++
}
END {
asorti(h, x)
for(k in h)
print h[k], k
}
Запустите это так:
gawk -f order.awk infile
Выход:
2 ab
1 ac
1 bc
Необходимо использовать то, что называется DNS с разделенным горизонтом или разделенным представлением.
Не все серверы поддерживают это. Возможно, для этого вам придется использовать ISC BIND , так как NSD от NLnet Labs и большинство других современных переписываний не рекламируют поддержку этого.
С практической точки зрения я бы рекомендовал создать единую зону со всеми именами хостов в ней, а затем использовать сценарий оболочки для автоматического создания разделенных зон на основе исходной зоны (, выбрав только соответствующие подсети. для каждого разделенного вида ). Вы можете использовать что-то вроде grepcidr , если ваши подсети сложнее, чем просто /24.