在 bash 中计算唯一字符串的出现次数而不首先对数据进行排序

ral*_*lar 3 bash awk count

我正在对大量日志文件进行一些数据收集,并且需要计算唯一字符串的出现次数。一般来说,完成此操作的方法是使用如下命令:

zcat <file> | grep -o <filter> | sort | uniq -c | sort -n
Run Code Online (Sandbox Code Playgroud)

我想要做的不是付出 grep 之后的那种性能损失。这可以在不离开 bash 的情况下完成吗?

anu*_*ava 5

您可以使用 awk 来计算唯一性并避免sort

zgrep -o <filter> <file> |
awk '{count[$0]++} END{for (i in count) print count[i], i}'
Run Code Online (Sandbox Code Playgroud)

另请注意,您可以避免zcat并直接致电zgrep