Я решил это так
#!/bin/bash
for f in {100..2} ; do mv $f $((f+1)); done
x="?_1"
y=$(echo $x | cut -b 1-1)
mv $x $y
Это делается вручную, но быстрее решает исходную проблему.
Что ж, пока можно делать такие вещи с помощью оболочки, awk и так далее, но использование локальной базы данных MaxMind даст вам лучшую и более предсказуемую производительность. А использование других языков, таких как Perl или Python, даст вам более читаемый код, например, с Python :
.import re
import fileinput
import geoip2.database
reader = geoip2.database.Reader('GeoLite2-City.mmdb')
for line in fileinput.input():
# Extract source ip using Regexp
src_ip_search = re.search("SRC=(\S+)", line)
if src_ip_search is None:
continue # Didn't find SRC record for some reason
src_ip = src_ip_search.group(1)
# Get ISO name of country for that ip from mmdb
src_iso_code = reader.city(src_ip).country.iso_code
print(re.sub("SRC=(\S+)", "SRC=\g<1>({})".format(src_iso_code), line)
Вы можете сделать это, например, с помощью этого скрипта:
out=$(awk '/INPUT/ {print $1,$2,$3,$11,$12}' /var/log/kern.log)
sourcec=$(whois $(echo $out|awk -F'[ =]' '{print $5}')|awk '/Country:/ {print $2}')
targetc=$(whois $(echo $out|awk -F'[ =]' '{print $7}')|awk '/Country:/ {print $2}')