awk:迭代大量文件的内容

时间:2013-06-29 11:14:30

标签: linux bash awk

所以,我有大约60k-70k的vCard文件,想要检查(或者,此时,计算),哪些vCards包含一个邮件地址(EMAIL; INTERNET:me@my-domain.com)

我试图将find的输出传递给awk,但我只是使用awk来处理文件列表,而不是每个文件内容。我怎么能这样做?我尝试了find,xargs和awk的几种组合,但是我没有让它正常工作。

感谢您的帮助, Wolle

2 个答案:

答案 0 :(得分: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:me@my-domain\.com" *
    

如果grep无法一次处理这么多文件,请放弃-r选项并尝试使用findxargs

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

答案 1 :(得分:0)

grep递归可以做到这一点

grep -r 'EMAIL.+@'