다음 내용이 포함된 dhcpd.leases 파일이 있습니다.
lease 172.231.100.152 {
starts 2 2017/11/14 14:50:41;
ends 2 2017/11/14 15:20:41;
tstp 2 2017/11/21 15:05:41;
cltt 2 2017/11/14 14:50:41;
binding state active;
next binding state expired;
lease 172.231.100.152 {
starts 2 2017/11/14 14:50:41;
ends 2 2017/11/14 15:20:41;
tstp 2 2017/11/21 15:05:41;
cltt 2 2017/11/14 14:50:41;
binding state active;
next binding state expired;
lease 172.231.100.152 {
starts 2 2017/11/14 14:50:41;
ends 2 2017/11/14 15:20:41;
tstp 2 2017/11/21 15:05:41;
cltt 2 2017/11/14 14:50:41;
binding state free;
next binding state expired;
lease 172.231.100.151 {
starts 2 2017/11/14 14:50:41;
ends 2 2017/11/14 15:20:41;
tstp 2 2017/11/21 15:05:41;
cltt 2 2017/11/14 14:50:41;
binding state active;
next binding state expired;
lease 172.231.100.152 {
starts 2 2017/11/14 14:50:41;
ends 2 2017/11/14 15:20:41;
tstp 2 2017/11/21 15:05:41;
cltt 2 2017/11/14 14:50:41;
binding state free;
next binding state expired;
이 문서에서 알 수 있듯이 일부 임대는 여러 번 기록됩니다. 고유한 IP 주소 범위를 파악하려면 172.231.100을 사용하고 바인딩 상태가 활성화된 IP 주소 범위만 사용하는 솔루션이 필요합니다. DHCP를 사용하여 이 작업을 수행할 수 있는 스크립트가 있다는 것을 알고 있지만 우리 스크립트는 atm에서 작동하지 않으므로 명령줄 솔루션이 있다면 좋을 것입니다. "Binding Status" 줄은 항상 "Lease" 줄의 여섯 번째 줄입니다.
답변1
앗해결책:
awk '/^lease/ && !($2 in ips){ f=1; ips[$2]=$0; n=NR+5 }
f && NR <= n{
a[++c]=$0;
if (NR == n) {
if ($NF == "active;") {
for (i=1; i<7; i++) print a[i]; print ""
}
c=0
}
}' dhcpd.leases
산출:
lease 172.231.100.152 {
starts 2 2017/11/14 14:50:41;
ends 2 2017/11/14 15:20:41;
tstp 2 2017/11/21 15:05:41;
cltt 2 2017/11/14 14:50:41;
binding state active;
lease 172.231.100.151 {
starts 2 2017/11/14 14:50:41;
ends 2 2017/11/14 15:20:41;
tstp 2 2017/11/21 15:05:41;
cltt 2 2017/11/14 14:50:41;
binding state active;