Tuesday, May 29, 2012

Network Management Hint: Sort by IP Address

Network Management Hint: Sort by IP Address

How do you sort a host table by IP Address on a UNIX network management platform?

This has been a basic requirement, since the dawn of The Internet.

Let's look at an example /etc/hosts extract:
sun9999/user$ cat /etc/hosts
#
127.0.0.1 localhost
::1 localhost

201.14.24.17 BT-Site-1 # LasPalmas
203.16.54.112 QB-Site-1 # NorthSydney
201.14.24.21 DL-Site-1 # LasPalmas
202.135.192.97 QB-Site-1 # NorthSydney
203.16.54.18 PR-Site-1 # NorthSydney
201.14.24.28 DL-Site-2 # LasPalmas
203.16.54.22 KP-Site-1 # NorthSydney

Each octet in an IPv4 address is separated by a period "." and a simple POSIX sort will use the period as the field separator and then request a numeric sort on the first, second, third, and fourth octets.
sun9999/user$ sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts

::1 localhost
#
127.0.0.1
localhost
201.14.24.17
BT-Site-1# LasPalmas
201.14.24.21
DL-Site-1# LasPalmas
201.14.24.28
DL-Site-2# LasPalmas
202.135.192.97
QB-Site-1# NorthSydney
203.16.54.18
PR-Site-1# NorthSydney
203.16.54.22
KP-Site-1# NorthSydney
203.16.54.112
QB-Site-1# NorthSydney

What it you want to eliminate colon ":" separated IPv6 addresses, empty lines, and lines with comments? Just perform a little POSIX awk'ing after the sort.
sun9999/user$ sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts | awk '1ドル!~/:/ && !/^$/ && !/^#/'
127.0.0.1 localhost
201.14.24.17 BT-Site-1 # LasPalmas
201.14.24.21 DL-Site-1 # LasPalmas
201.14.24.28 DL-Site-2 # LasPalmas
202.135.192.97 QB-Site-1 # NorthSydney
203.16.54.18 PR-Site-1 # NorthSydney
203.16.54.22 KP-Site-1 # NorthSydney
203.16.54.112 QB-Site-1 # NorthSydney
Want to eliminate all localhost entries? Add a localhost elimination pattern:
sun9999/user$ sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts | awk '1ドル!~/:/ && !/^$/ && !/^#/ && !/localhost/'
201.14.24.17 BT-Site-1 # LasPalmas
201.14.24.21 DL-Site-1 # LasPalmas
201.14.24.28 DL-Site-2 # LasPalmas
202.135.192.97 QB-Site-1 # NorthSydney
203.16.54.18 PR-Site-1 # NorthSydney
203.16.54.22 KP-Site-1 # NorthSydney
203.16.54.112 QB-Site-1 # NorthSydney
Need to print only the host name, sorted by IP Address, for entries managed by NorthSydney NOC?
sun9999/user$ sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts |
awk '1ドル!~/:/ && !/^$/ && !/^#/ && !/localhost/ && /NorthSydney/ {
print 2ドル }'
QB-Site-1
PR-Site-1
KP-Site-1
QB-Site-1


If you are not using POSIX commands to do standard network management work, you don't know what you are missing!
Posted by at
Labels: , , , , , ,

No comments:

Post a Comment

[フレーム]

Subscribe to: Post Comments (Atom)

AltStyle によって変換されたページ (->オリジナル) /