2010-09-27 98 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文件中。