2012-04-24 9 views
0

以下のコードは 'Country'を抽出しますが、 の2行目に 'city'も抽出する方法はありますか?2つの異なる行からコマンドをカット

geoiplookup 212.58.246.82 | grep Country | cut -c 28-45 

GeoIP Country Edition: GB, United Kingdom 
GeoIP City Edition, Rev 1: GB, N7, Tadworth, N/A, 51.283298, -0.233300, 0, 0 
GeoIP City Edition, Rev 0: GB, N7, Tadworth, N/A, 51.283298, -0.233300 

私は私の出力は次のようになりたい - 例えば>都市、国

:Tadworth、イギリス

は私のコードは、現在、ちょうど私にイギリス

を与えます
+2

をお試しくださいあなたの例では、コンマ区切りの出力行からデータを列番号で抽出しています。あなたがしようとしていることは、おそらくもっと良い方法があります。 – larsks

+0

質問を編集して 'output'を含めてください。 – kev

+0

これは 'awk'を調べたいかもしれません。 –

答えて

2

geoiplookupはコンマ区切りの出力を生成しています。 cutコマンドで行っているように、列番号でデータを抽出しようとすると、非常に壊れやすくなります。フィールドセパレータまたはawkを持つcut、または高水準のスクリプト言語は、より柔軟になります。私たちは、最初のラベルと:で区切られたデータにそれぞれの行を分割

BEGIN {FS=":"} 

    /GeoIP Country Edition/ { 
      split($2, parts, ", ") 
      country_code=parts[1] 
      country_name=parts[2] 
      } 

    /GeoIP City Edition/ { 
      split($2, parts, ", ") 
      city_name=parts[3] 

      printf "%s, %s\n", city_name, country_name 
      } 

:たとえば、次のようawkスクリプトが何をしたいおよそ行います。 次に、データ内で,に分割し、関連するフィールドを抽出します。

+0

ラルスク、うまくいった。私はあなたがしばらくの間スクリプトを書いているのを見ることができます。これは動作します。ありがとう! – Jim

0

あなたは私たちにあなたが何をしようとしてについてもう少し教えてください。この

geoiplookup 212.58.246.82 | cut -d' ' -f2 | tr "\n" "," 
関連する問題