2013-06-29 46 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