使用Linux,
(one address in one single line)但没有特定delimiter的文件中排序和识别重复地址。我尝试了所有使用grep -i "AX.*BY.*CZ"的地址criteria, sed, awk, agrep
但问题是,每次它只在文件中搜索字符串,而不是像AX and then BY and then CZ那样按顺序搜索字符串。这就是为什么输出中有很多异常现象。
请让我知道怎么做?
发布于 2017-12-23 10:45:50
查看您的address-list.csv文件,这似乎是倒垃圾,倒垃圾的一种情况。
我怀疑你能否用grep或sed做你想做的事。事实上,我怀疑是否有任何工具或脚本语言可以使用。
你也许可以用awk或perl或类似的语言做一些有用的事情,但是地址似乎没有一致的格式--大多数都有六位数的邮政编码,但并不是所有的行都有。许多人似乎把城市的名字和国家作为第二、最后和最后的字段。(“印度加尔各答”)但有些人跳过了国家,有些人在邮政编码前有城市名称,有些人在街道地址后面有城镇名称,有些人既没有城市也没有国家。有些在街道地址之前有个人/家庭/企业名称,有些在街道地址之后有,有些没有名字。
简而言之,如果没有大量的街道名称、城市/城镇/郊区名称、邮政编码、州名、etc....and,那么整个文件就无法自动处理,即使您有这样的列表,尝试将所有这些与每一行的子字符串匹配起来将非常复杂。
处理这一点需要智能(人或人工),而不是正则表达式或其他公式。
这就是试图处理自由格式的文本的问题,而这些文本甚至不假装有任何结构。有了文件中的一些奇怪之处,我想说这个.csv文件不仅仅是自由形式,而是“奇异形式”。
这就是为什么你从来不让用户在自由格式的文本字段中输入地址。你给他们一个标准的字段集,这些字段组成了一个地址名、街道号、街道名称、郊区、城市、邮政编码、国家等等。一些用户仍然会设法搞砸它,但你的绝大部分数据将被放在一个可用的form...and中,其余的数据要么可以手工修复,要么只是被丢弃。
IMO,您最好的选择是使用文本编辑器手动编辑它,使其成为一些标准化的形式,可以使用面向行的工具(如grep )轻松地处理。vi特别擅长这种重复的编辑任务--模式编辑器擅长于这样的任务,一个熟练的人可以在很小的一小部分时间内完成工作,而使用像nano这样的简单、无模式的编辑器所需的时间很小。
我建议如下:
name:street address:postal code:city:country:comments注意:在:文件中没有多少.csv字符,可以用.字符删除或替换其中的字符。此外,country可能是可选的(它似乎是一个完整的印度地址列表),但拥有它并不有害-如果country字段为空,您的代码可能默认为"India“。
或者,您也可以尝试找到一个不是garbage...but的地址列表--我猜您正在尝试创建一个地址列表,因为这是您所拥有的全部。
https://unix.stackexchange.com/questions/412640
复制相似问题