2016-05-04 28 views
3

ip:portのファイル(serverlist.txt)を探しているスクリプトで助けが必要です。IPを含むファイルを読み込み、新しいIP.txtファイルに国コードを書き込んでください

serverlist.txtには、IP番号のポート番号が含まれています。

serverlist.txt

1.2.3.4:27967 
5.6.7.8:27962 
6.7.8.9:27968 
2.5.6.7:27964 

スクリプトは、ポートをカットし、その後geoiplookupと国番号を要求すべきです。

1.2.3.4:27967.txt

US 

5.6.7.8:27962.txt

DE 
:その完成したときは、すべてのIPのために、このような新しい独自のファイルに国番号があるはずです

これは私が今まで持っているコードです:

getcountry.sh

#!/bin/bash 
cat serverlist.txt |while read $socket; do cut -f1 -d":">ip.txt; done; 
cat ip.txt | while read ip; do geoiplookup $ip | awk -v FS="(GeoIP Country Edition: |,)" '{print $2}'>>countrycode.txt ; done; 

私はipsとcountrycodeを取得できます。しかし、私はそれらを一緒に新しいファイルに合わせる方法を知らない。 ありがとうございました。 ;)それを行う必要がありますスクリプト

#!/bin/bash 
awk 'BEGIN{FS=":"}{print $1}' "$1" | while read ip 
do 
geoiplookup "$ip" | sed 's/GeoIP Country Edition: \([A-Z ]\{2\}\).*/\1/' > "$ip.txt" 
done 

以下

+0

@fedorqui:他の方法は正しいでしょうか?すべてのipのための – sjsam

+0

はそれ自身のファイルであるべきです – hansfrans

答えて

2

のは、serverlist.txt内のコンテンツを通じて仲介ip.txtファイルだけループを作成しないようにしましょう。

内部フィールドセパレータ(IFS)を:に設定すると、ipportの両方を抽出できます。次に、geoiplookupを実行してパイプをawkにして、出力を変数$countryに保存します。

最後に、IP名にちなんで名付けられたファイルに書き込む:

while IFS=":" read ip port; do 
    country=$(geoiplookup "$ip" | awk -v FS="(GeoIP Country Edition: |,)" '{print $2}') 
    printf "$country\n" >> $ip:$port.txt 
done < serverlist.txt 

これは、あなただけの名前を格納する変数$ipを参照するために必要な、あなたは何をしていたと非常によく似ています。

cat ip.txt | while read ip; do ... >> $ip.txt ; done; 
#          ^^^ 

注意あなたがサブシェルを開かないと、ループ内で定義されているすべての変数が外に利用できるように、私は、構文while read; do ... done < file代わりのcat file | while ...を使用しています。

+0

働いていただきありがとうございます。私は、新しいファイルの名前を例えば:1.2.3.4:27962.txtと書かなければならなかった。あなたもそれで私を助けることができますか? – hansfrans

+0

@hansfrans確かに、あなたは 'printf" ... ">> $ ip:$ port.txt'を必要とします。とにかく私の更新を見てください。 – fedorqui

+1

パーフェクト。ありがとうございました。 ;) – hansfrans

1

。あなたのIPアドレスが解決できない場合は

./script your_file_name 

のようなスクリプトを実行し、ip.txtファイルにはアドレスが解決できなかったことを意味し、その中に文字IPを持つことになります。以下に示すようにgeoiplookupは、2つの出力のあなたのいずれかを与えることができる

注:

[email protected]:~/Documents/so$ geoiplookup 103.233.67.7 
GeoIP Country Edition: IP Address not found 

または

[email protected]:~/Documents/so$ geoiplookup 216.239.63.222 
GeoIP Country Edition: US, United States 
関連する問題