【问题标题】:Open and extract information from large text file (Geonames)从大型文本文件(Geonames)中打开并提取信息
【发布时间】:2018-05-21 15:50:19
【问题描述】:

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

Geonames 似乎是一个不错的起点,尽管我需要在本地使用它(而不是 API),因为我将在使用信息时离线工作。

由于地理名称“allcountries.txt”文件很大,它无法在记事本、Notepad++ 和 Sublime 上打开。我尝试在 Excel 中打开(包括数据建模功能),但文件有超过一百万行,所以这也不起作用。

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

【问题讨论】:

  • 你为什么不只使用英国的文件? allcountries 是给全世界的不是吗?

标签: geonames


【解决方案1】:

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

我添加了另一个答案,因为这种技术更加灵活,并且允许您按国家/地区或任何其他列进行过滤。即,您可以调整此解决方案以按语言、英国地区、人口等进行过滤,或者将其应用到ities5000.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”的文件。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 2013-03-26
    • 2015-06-07
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多