2012-07-30 19 views
0

我正在使用以下命令以從文件中提取域名&完整域擴展名。例如:www.abc.yahoo.com,www.efg.yahoo.com.us。egrep不寫入文件

[a-z0-9\-]+\.com(\.[a-z]{2})?' source.txt | sort | uniq | sed -e 's/www.//' 
> dest.txt 

的命令寫正確,當我source.txt後指定較小的最大參數-m 100。這個問題如果我沒有指定,或者我指定了一個巨大的數字。儘管如此,我可以用grep(而不是egrep)寫入文件,其數據類似於我現在正在嘗試的那樣,而且很成功。我還檢查命令執行過程中最後修改的日期和時間,看起來目標文件中沒有修改。可能是什麼問題呢 ?

+0

大多數版本的'在Linux上sort'有'-u'作爲參數做'uniq'步驟。試試吧...... – JimR 2012-07-30 04:51:56

回答

1

正如我在你的earlier question提到的,它可能不是與egrep的問題,而是你的文件太大,並且sort不會輸出任何東西(到uniq),直到egrep的完成。我建議你使用split命令將文件分割成可管理的卡盤。事情是這樣的:

split -l 10000000 source.txt split_source. 

這將source.txt文件分成10個百萬行的塊稱爲split_source.asplit_source.bsplit_source.c等,並可以運行這些文件中的每一個完整的命令(也許改變管在末尾附加:>> dest.txt)。

這裏的問題是,你可以得到多個文件副本,所以在最後,你可能需要運行

sort dest.txt | uniq > dest_uniq.txt 
+0

這個文件太大了。我等了很長時間,並寫下了它。我懷疑是因爲最後修改日期和時間顯示我沒有進展或修改正在發生。 – 2012-07-30 16:18:29

+0

@JuryA是的,這是因爲'sort'在從egrep獲取所有數據(爲了正確排序)之前不會輸出任何內容,因此在egrep完成之前根本沒有任何事情發生。 – 2012-07-30 16:19:38

0

您的問題缺少信息。

除此之外,還有一些想法。首先,調試和隔離您的問題:

  1. 運行egrep <params> | less所以你可以看到什麼egreps做,並從sortuniq,或sed消除任何問題(上sort我的投注)。

  2. 您的輸入有多大?任何機會sort死於太多的輸入?

  3. 需要看完整的命令才能做出進一步的評論。

二,提高你的腳本:

  1. 你可能想sort | uniqsed,否則你可能會在你的結果集中的重複和無序結果集結束。也許這就是你想要的。

  2. 考慮使用「^ ... $」包裝正則表達式,如果適合建立起始行(^)和結束行($)錨點。否則,你會匹配一行中間的部分。