2014-09-20 147 views
1

我有一個大的文本文件,其中包含名爲「主要」的電子郵件列表,我已經發送郵件給其中的一些。我有一個'發送'的電子郵件列表。現在,我想從「main」列表中刪除「已發送」的電子郵件。如何刪除兩個匹配的行,同時刪除重複

換句話說,我想刪除文本文件中的匹配原始數據,同時刪除重複項。例如:

我:

[email protected] 
[email protected] 
[email protected] 

我想:

[email protected] 

有沒有更簡單的方式來實現這一目標?請建議一個工具或方法來做到這一點,但請考慮文本文件大於10MB。

+0

記事本++是否支持正則表達式/腳本? – sln 2014-09-20 22:56:55

+0

@sln是的。 – Cullub 2014-09-20 22:57:35

+0

您可以使用power shells比較對象cmdlet http://technet.microsoft.com/en-us/library/ee156812.aspx – 2014-09-20 23:12:21

回答

0

在終端:

cat test| sort | uniq -c | awk -F" " '{if($1==1) print $2}' 
+4

你能否詳細解釋一下你的答案? – Miki 2014-09-20 23:16:33

+1

你能解釋一下嗎? – leopard121 2014-09-24 11:44:30

0

我使用cygwin很多關於這樣的任務,如UNIX命令行是極其強大的。

下面是如何實現你想要的:

cat main.txt | sort -u | grep -Fvxf sent.txt 

sort -u將刪除重複(,首先分揀main.txt文件),並grep將採取去除不受歡迎的地址的照顧。

下面介紹一下grep選項的含義:

  • -F純文本搜索
  • -v反轉導致
  • -x將迫使整個行
  • -f讀模式從指定的文件匹配的模式

哦,如果你的文件在Windows格式(CR LF新行),你寧願這樣做:

cat main.txt | dos2unix | sort -u | grep -Fvxf <(cat sent.txt | dos2unix) 

就像使用Windows命令行,你可以簡單地添加:

> output.txt 

在命令行結束時將輸出重定向到文本文件。

+0

非常感謝。但有沒有辦法在Notepad ++或任何其他類似的基於Windows的軟件中執行此操作。 – leopard121 2014-09-24 11:44:00

+0

這太需要一個文本編輯器來處理,但cygwin是針對windows的。 – 2014-09-24 11:52:44