从包含没有特定分隔符的地址的文件中查找重复地址

从包含没有特定分隔符的地址的文件中查找重复地址

使用Linux,

  1. (one address in one single line)我想对包含地址但不包含特定地址的文件中的重复地址进行排序和识别delimiter

  2. 文件中每个重复地址的重定向列表,文件名作为重复地址本身。

我尝试了所有使用grep -i "AX.*BY.*CZ"地址criteria, sed, awk, agrep

但问题是,每次它只搜索文件中是否存在字符串,而不是像AX and then BY and then CZ.这就是输出中有很多异常的原因。

请让我知道该怎么做?

答案1

查看你的address-list.csv文件,这似乎是垃圾进垃圾出

我怀疑你是否可以用grepor做你想做的事sed。事实上,我怀疑是否有任何工具或脚本语言可以使用。

您可能能够使用awkperl类似功能的语言做一些模糊有用的事情,但地址甚至似乎没有一致的格式 - 大多数地址都有看起来像六位数字的邮政编码,但并非所有线路都有。许多似乎将城市名称和国家/地区作为倒数第二个和最后一个字段(例如“加尔各答印度”),但有些跳过国家/地区,有些在邮政编码之前包含城市名称,有些在街道名称之后包含城镇名称地址,有些既没有城市也没有国家。有些在街道地址之前有个人/家庭/公司名称,有些在后面,有些没有名字。

简而言之,整个文件一团糟,如果没有大量街道名称、城市/城镇/郊区名称、邮政编码、州名称等,就无法自动处理......即使您有这样的列表,尝试将所有这些与每行的子字符串进行匹配将非常复杂。

处理这个问题需要智能(人类或人工智能),而不是正则表达式或其他公式。

这是尝试处理甚至不假装具有任何结构的自由格式文本的问题。由于文件中存在一些奇怪的地方,我想说这个 .csv 文件远远超出了单纯的自由格式,变成了“奇怪的格式”。

这就是为什么您永远不让用户在自由格式的文本字段中输入地址。您为构成地址的各个部分(姓名、街道号、街道名称、郊区、城市、邮政编码、国家/地区等)提供了一组标准字段。有些用户仍会设法搞砸它,但您的绝大多数数据将处于可用形式...其余数据可以手动修复或丢弃。

IMO,您最好的选择是使用文本编辑器手动将其编辑为某种标准化形式,可以使用面向行的工具(例如grep. vi特别擅长此类重复性编辑任务 - 模态编辑器擅长此类任务,并且技术人员只需使用简单的非模态编辑器(如nano.

我会建议这样的事情:

name:street address:postal code:city:country:comments

注意:.csv 文件中的字符不多:,可以将其中的字符删除或替换为.字符。另外,country可能是可选的(它似乎是完全印度地址的列表),但拥有它并没有什么坏处 - 如果国家/地区字段为空,您的代码可能默认为“印度”。

或者,也许您可​​以尝试找到一个不是垃圾的地址列表...但我猜您正在尝试创建一个地址列表,因为这就是您所拥有的全部。

相关内容