【发布时间】:2015-03-30 07:29:57
【问题描述】:
在尝试优化一些与服务器相关的数据时,我和我的团队讨论了 linux 命令的使用。会请求会员帮助我们更准确地理解这个概念。
在服务器上,我们有每分钟创建的日志文件,我们需要搜索带有特定标签的日志,例如:错误日志、超时日志、请求失败日志。在众多标签中,一项要求是提供有关这些标签数量的信息
简单的逻辑是 awk 特定字段(带分隔符)进行排序,使用 uniq -c 命令计算此类实例的数量。
我可以看到两种执行方式:
cat fname | awk -F":" {'print $1'} | sort | uniq -c
和
awk -F":" {'print $1'} fname | sort | uniq -c
文件大小可以以 GB 为单位,因此哪个命令可能更有效。
【问题讨论】:
-
为什么不
grep "TAG" log.txt | wc -l -
Awk 非常适合字段操作,但对于简单的计数,我会使用 grep。
-
grep 的问题是它会计算标签(如果在其他字段中可用)。例如:“超时标签”的描述为“尝试连接 IP 时出错”。所以我们可能会得到错误的计数。