从2个不同的行切割命令

时间:2012-04-24 00:42:19

标签: bash

我的代码在下面提取“国家”,但我怎样才能提取“城市” 第二排?

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

我希望我的输出看起来像这样 - >城市,国家

例如:英国塔德沃思

我的代码目前只给我英国

2 个答案:

答案 0 :(得分:2)

geoiplookup正在生成以逗号分隔的输出。在使用cut命令时,按列号尝试提取数据将非常脆弱。 cut与字段分隔符 - 或awk或高级脚本语言 - 将更加灵活。例如,以下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
          }

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

答案 1 :(得分:0)

试试这个

geoiplookup 212.58.246.82 | cut -d' ' -f2 | tr "\n" ","