for循环grep -wc中有多个字符串

时间:2015-01-31 15:37:20

标签: bash for-loop grep

如何添加多个字符串以搜索同一文件:

目前:

#!/bin/bash

for log in filename.log.201[45]-*-*.gz; do
    printf '%s:' "$log"
    zcat "$log" | grep -wc 'dollar for dollars'
done

期望的结果:

#!/bin/bash

for log in filename.log.201[45]-*-*.gz; do
    printf '%s:' "$log"
    echo "count for dollar for dollars"
    zcat "$log" | grep -wc 'dollar for dollars'

    echo "count for pollar for pollars"
    zcat "$log" | grep -wc 'pollar for pollars'
done

2 个答案:

答案 0 :(得分:0)

您可以使用嵌套循环。

for count in 'dollar for dollars' 'pollar for pollars'; do 
 for log in filename.log.201[45]-*-*.gz; do
     printf '%s:' "$log"
     echo -n $count : 
     zcat "$log" | grep -wc "$count"
  done
done

答案 1 :(得分:0)

您最好使用实际的编程语言,例如awk

如果您想要计算每个模式的总出现次数(可能超过每个模式出现的行数,如果模式在一行中出现多次),您可以使用grep的-o选项输出实际匹配,然后使用sort | uniq -c构造最终报告,它计算输出流中每个唯一行的出现次数。这使您可以使用-e选项为单个grep命令提供多个模式:

for log in filename.log.201[45]-*-*.gz; do
  zcat "$log" |
  grep -e "pattern 1" -e "pattern 2" -ow |
  sort | uniq -c |
  xargs -d\\n printf "${log//%/%%}:%s\n"
done