我有一个包含500名成员及其电话号码的CSV列表。我尝试过diff工具,但似乎没有人能找到重复的工具。
我可以使用正则表达式按成员的电话号码查找重复的行吗?
我在Mac上使用Textmate。
非常感谢
答案 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文件中。