2010-09-27 96 views
2

我有一个包含500个成员的电话号码的CSV列表。我尝试了diff工具,但似乎没有人可以找到重复的东西。查找重复(正则表达式)

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

我在Mac上使用Textmate。

非常感谢

+0

你可以使用正则表达式吗?大概。你应该使用正则表达式吗?一定不行。 – NullUserException 2010-09-27 13:55:45

回答

4

重复搜索什么?整条线路或只是相同的电话号码?

如果是整条生产线,那就试试这个:

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

,你会在底部看到,发生一次以上的所有行。

如果它仅仅是在一些列的电话号码,然后使用此:

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

更换“4”与电话号码和列数“;”用你在文件中使用的真正分隔符。

或者从这个文件中给我们几行例子。

EDIT

如果数据格式为:name,mobile,phone,uniqueid,group,然后使用以下:

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

+0

Erm..in which language is this? – 3zzy 2010-09-27 14:15:34

+0

行都是这种格式:'姓名,手机,电话,UNIQUEID,group' – 3zzy 2010-09-27 14:16:39

+0

完美,非常感谢! :) – 3zzy 2010-09-27 14:54:45

0

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

+0

我可以想到更糟糕的解决方案 – 2011-09-17 23:23:05

0

你在用什么语言?在.NET中,您可以毫不费力地将CSV文件加载到DataTable中,并查找/删除重复的行。之后,将您的DataTable写回另一个CSV文件。

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

2

是的。要想做到这一点,请看here。但是你可能不想这样做。

+0

已经看到有,此'(<=,|?^)([^,] *)(\ 1)+(=,|?$)'仅在逗号匹配逗号分隔CSV。 – 3zzy 2010-09-27 14:03:42

0

使用PERL。

负载的CSV文件到一个数组中,并匹配您要检查(电话号码)的副本,然后将值存储到另一个数组,然后检查数组中重复列,使用:

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

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