On Tue, Aug 17, 2010 at 04:50:56PM -0800, Tim Gibney wrote:
> That is alot of strange idiosyncratic babble I have ever seen to print a
> simple hosts file I.P addresses with a sort. Wouldn't python ... or even
> bash be easier? Perl scares me
Neither would be much easier. Below is my Python version. I don't like
you (or, probably, anyone) enough to write a bash version.
This even sorts IPv6 properly.
#!/usr/bin/python
import socket
def extract_ipaddr(row):
ipaddr = row[0]
try:
packed = socket.inet_pton(socket.AF_INET6, ipaddr)
addrtype = 6
except:
packed = socket.inet_pton(socket.AF_INET, ipaddr)
addrtype = 4
print ipaddr, addrtype
return (addrtype, packed)
def compare_ipaddr(left, right):
return cmp(left[0], right[0]) or cmp(left[1], right[1])
hosts = open('/etc/hosts', 'r');
ipaddrs = {}
maxcol = 0
for line in hosts:
line = line.strip()
if line.startswith('#'): continue
if line == '': continue
row = line.split()
ipaddr = row[0]
if ipaddr not in ipaddrs:
ipaddrs[ipaddr] = []
ipaddrs[ipaddr].extend(row[1:])
if len(row) > maxcol:
maxcol = len(row)
maxlen = [0 for x in range(0, maxcol)]
table = [[k] + v[:] for k, v in ipaddrs.iteritems()]
table.sort(key = extract_ipaddr)
print table
for row in table:
for i in range(0, maxcol - len(row)):
row.append('')
for i in range(0, len(row)):
if len(row[i]) > maxlen[i]:
maxlen[i] = len(row[i])
format = ' '.join('%%-%ds' % x for x in maxlen[:-1]) + ' %s'
for row in table:
print format % tuple(row)
-- Michael Fowler www.shoebox.net --------- To unsubscribe, send email to <aklug-request@aklug.org> with 'unsubscribe' in the message body.Received on Wed Aug 18 00:13:52 2010
This archive was generated by hypermail 2.1.8 : Wed Aug 18 2010 - 00:13:52 AKDT