2013-06-29 78 views
0

因此,我有大約60k-70k的vCard文件,並且希望檢查(或者在這一點上,計數)哪個vCards包含郵件地址(EMAIL; INTERNET: [email protected]awk:遍歷大量文件列表

我試圖將find的輸出傳遞給awk,但我只是讓awk與文件列表一起工作,而不是與每個文件內容一起使用。我怎樣才能讓awk這樣做呢?我嘗試了幾種find,xargs和awk的組合,但我沒有得到它的正常工作。

感謝您的幫助, Wolle

+0

要首先讓我們看看你做了什麼?張貼你試過的東西。 – devnull

+0

找到./ -iname「* .vcf」| xargs -i awk'/[email protected]/'{}或 awk'/[email protected]/'$(find ./ -iname「* .vcf」... 和一些超複雜的組合我不能請記住: – WolleTD

回答

2

我可能會使用grep這一點。

  • 如果你想從文件中提取不會忽略:

    grep -rio "EMAIL;INTERNET:.*@[a-z0-9-]*\.[a-z]*" * 
    

    使用cutsedawk刪除前導EMAIL;INTERNET:

    ... | cut -d: -f2 
    ... | sed "s/.*://" 
    ... | awk -F: '{print $2}' 
    
  • 如果你想要的名稱包含特定地址的文件:

    grep -ril "EMAIL;INTERNET:[email protected]\.com" * 
    

如果grep不能同時處理很多文件,刪除-r期權以及findxargs嘗試:

find /start/dir -name "*.vcf" -print0 | xargs -0 -I {} grep -io "..." {} 
+0

這是有效的,但是在經過70k個文件時死在某個點:( – WolleTD

+0

哪個命令死了,在哪一點,什麼是錯誤代碼/消息?是否所有.vcf文件位於同一目錄中? –

+0

不,有一個目錄結構... Grep因虛擬內存不足而死亡... – WolleTD