查找重复项(正则表达式)

时间:2010-09-27 13:54:11

标签: regex csv match

我有一个包含500名成员及其电话号码的CSV列表。我尝试过diff工具,但似乎没有人能找到重复的工具。

我可以使用正则表达式按成员的电话号码查找重复的行吗?

我在Mac上使用Textmate。

非常感谢

5 个答案:

答案 0 :(得分:4)

您要搜索的重复内容是什么?整条线路还是同一个电话号码?

如果是整行,那么试试这个:

sort phonelist.txt | uniq -c | sort -n

你将在底部看到不止一次出现的所有行。

如果它只是某些列中的电话号码,请使用:

awk -F ';' '{print $4}' phonelist.txt | uniq -c | sort -n

将“4”替换为带有电话号码的列号和“;”使用您在文件中使用的真实分隔符。

或者从这个文件中给我们一些示例行。

修改

如果数据格式为:name,mobile,phone,uniqueid,group,请使用以下内容:

awk -F ',' '{print $3}' phonelist.txt | uniq -c | sort -n

在命令行中。

答案 1 :(得分:2)

是。对于一种方法,请查看here。但你可能不想这样做。

答案 2 :(得分:0)

您通常可以解析此文件,并检查哪些行是重复的。我认为RAGEX是解决这个问题的最差解决方案。

答案 3 :(得分:0)

您使用的是哪种语言?在.NET中,您可以轻松地将CSV文件加载到DataTable中并查找/删除重复的行。然后,将DataTable写回另一个CSV文件。

哎呀,您可以将此文件加载到Excel并按字段排序并手动查找重复项。 500并不是那么多。

答案 4 :(得分:0)

使用PERL。

将CSV文件加载到一个数组中,并将要检查的列(电话号码)与重复项匹配,然后将值存储到另一个数组中,然后使用以下命令检查该数组中的重复项:

my %seen;
my @unique = grep !$seen{$_}++, @array2;

之后,您需要做的就是将唯一数组(电话号码)加载到for循环中,然后在其内部将数组#1(行)加载到for循环中。比较唯一数组中的电话号码,如果匹配,则将该行输出到另一个csv文件中。