IPアドレスグループを含むファイルがあります。ファイルは次のようになります。
London:
1.1.1.0-1.1.1.200
172.25.2.0-172.25.2.100
Germany:
2.2.2.0-2.2.2.100
192.168.1.0-192.168.1.200
172.25.2.0-172.25.2.200
したがって、IPアドレス()を検索すると./program.sh 172.25.2.32
ロンドンとドイツが出力されるはずです。
ベストアンサー1
他の解決策を受け入れませんでした。これは、その出力が要求された「ロンドンとドイツ」と一致しないためです。
最新のPythonはIPアドレスを直接処理できます。
#! /usr/bin/env python3.4
# coding: utf-8
# also works on 2.7 after installing ipaddress from PyPI
import sys
from ipaddress import ip_address
print
ip_string = sys.argv[1]
if sys.version_info < (3,):
ip_string = ip_string.decode('utf-8')
ip = ip_address(ip_string)
locs = []
for line in open('input'):
try:
loc, rest = line.split(':')
except ValueError:
try:
if sys.version_info < (3,):
sr, er = map(ip_address, [x.decode('utf-8') for x in line.rstrip().split('-')])
else:
sr, er = map(ip_address, line.rstrip().split('-'))
if sr < ip < er:
locs.append(loc)
except ValueError:
print 'error in input line:', repr(line)
break
if len(locs) > 2:
locs = [', '.join(locs[:-1]), locs[-1]]
print(' and '.join(locs))
これは見つかった場所を印刷し、and
見つかった最後の2つの場所の間に「」を入れ、該当する,
場合は他のすべての場所の間に「」を入れます。London, Paris and Germany
データがという名前のファイルにあるとし、input
スクリプトを実行可能にするか、次を使用します。python scriptname 172.25.2.32