0

我下面的代码提取了“国家”,但我如何在第二行中提取“城市”?

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

我希望我的输出看起来像这样 -> city, Country

例如:英国塔德沃思

我的代码目前只给了我英国

4

2 回答 2

2

geoiplookup正在产生逗号分隔的输出。正如您对cut命令所做的那样,尝试按列号提取数据将非常脆弱。 cut使用字段分隔符 - orawk或高级脚本语言 - 将更加灵活。例如,以下awk脚本将大致执行您想要的操作:

  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
          }

我们首先将每一行拆分为一个标签和一个以 . 分隔的数据:。然后在数据中,我们拆分,并提取相关字段。

于 2012-04-24T00:58:16.093 回答
0

尝试这个

geoiplookup 212.58.246.82 | cut -d' ' -f2 | tr "\n" ","
于 2012-04-26T19:55:46.340 回答