I’m looking for a one-liner that based on a list of IPs will append the country from where the IP is based
So if I have this as and input:
87.229.123.33
98.12.33.46
192.34.55.123
I’d like to produce this:
87.229.123.33 - GB
98.12.33.46 - DE
192.34.55.123 - US
I’ve already got a script that returns the country for IP but I need to glue it all together with awk, so far this is waht I came up with:
$ get_ips | nawk '{ print $1; system("ip2country " $1) }'
This is all cool but the ip and the country are not displayed on the same line, how can I merge the system output and the ip on one line ?
If you have a better way of doing this, I’m open to suggestions.
The proper one-liner solution in awk is:
However I think it would be much faster if You would use a python program looking like that:
As You can see, the geoip object is initialized only once and then it is reused for all queries. See a python binding for geoip. Also be aware that Your awk solution forks a new process 2 times per line!
I don’t know how many entries You need to process, but if it’s much of it, You should consider something that doesn’t fork and keeps the geoip database in memory.