从大文本文件(Geonames)中打开并提取信息

时间:2018-05-21 15:50:20

标签: geonames

我想列出英国所有主要城镇的名单。

Geonames似乎是一个很好的起点,虽然我需要在本地使用它(而不是API),因为我将在使用这些信息时离线工作。

由于geonames“allcountries.txt”文件的大小,它不会在Notepad,Notepad ++和Sublime上打开。我尝试在Excel中打开(包括数据建模功能),但该文件有超过一百万行,所以这也无法正常工作。

是否可以打开此文件,提取仅限英国的城市,并在Excel和/或其他软件中操作?我只是在地名,纬度,长,国名,大陆之后

1 个答案:

答案 0 :(得分:0)

@dedek的建议(在评论中)使用GB.txt绝对是针对您的特定情况的最佳答案。

我添加了另一个答案,因为此技术更加灵活,可让您按国家或其他任何列进行过滤。即,您可以调整此解决方案,以按语言,英国的地区,人口等进行过滤,或将其应用于“ citys5000.txt”文件。

解决方案:

使用grep查找与特定模式匹配的数据。本质上,下面的命令说的是,找到第8列正好是“ GB”的所有行。

grep -P "[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\tGB\t" allCountries.txt > UK.txt

({grep是大多数Unix系统的标准配置,但是肯定有可以在Windows上运行的工具。)

详细信息:

  • grep:正在执行的命令。
  • \ t:TAB字符的缩写。
  • -P:告诉grep使用Perl样式的正则表达式(否则grep可能无法将\t识别为TAB字符)。 (如果您使用的是grep的其他版本,则可能会有所不同。)
  • [^ \ t] *:零个或多个非制表符,即可选的列值。
  • > UK.txt:将命令的输出写入名为“ UK.txt”的文件。

同样,您可以修改此示例以过滤任何文件中的任何列。