如何grep唯一出现次数

Sim*_*ton 4 bash awk grep

据我所知,grep -c string可以用来计算给定字符串的出现次数.我想要做的是计算只有部分字符串已知或保持不变时唯一出现的次数.

例如,如果我有一个文件(在这种情况下是一个日志),其中有几行包含一个常量字符串和一个重复变量,如下所示:

string=value1
string=value1
string=value1
string=value2
string=value3
string=value2
Run Code Online (Sandbox Code Playgroud)

我希望能够识别每个唯一集合的数量,其输出类似于以下内容:(理想情况下使用单个grep/awk字符串)

value1 = 3 occurrences
value2 = 2 occurrences
value3 = 1 occurrences
Run Code Online (Sandbox Code Playgroud)

有没有人有使用grep或awk可能有效的解决方案?提前致谢!

Sim*_*ton 18

这完美地运作...感谢大家的意见!

grep -oP "wwn=[^,]*" path/to/file | sort | uniq -c

  • 当我尝试这个时,我注意到一些有趣的事情。当我在尝试查找唯一出现之前不进行排序时,`uniq` 似乎无法正常运行,无论如何我都得到了所有出现。还有人注意到吗? (2认同)

fed*_*qui 5

通常,如果要grep并跟踪结果,最好使用awk它,因为它以非常简单的语法以清晰的方式执行此类操作。

因此,对于您给定的文件,我将使用:

$ awk -F= '/string=/ {count[$2]++} END {for (i in count) print i, count[i]}' file
value1 3
value2 2
value3 1
Run Code Online (Sandbox Code Playgroud)

这是在做什么

  • -F=
    将字段分隔符设置为=,以便我们可以计算它的左右部分。
  • /string=/ {count[$2]++}
    当找到“ string =”模式时,检查它!这使用数组count[]来跟踪第二个字段到目前为止的出现时间。
  • END {for (i in count) print i, count[i]}
    最后,循环搜索结果并打印。