您是否期望这两个命令链的输出有所不同?

您是否期望这两个命令链的输出有所不同?

我正在为 Linux 课程做一个项目,我们正在编写一个脚本来从日志文件中提取统计数据。这个特定的命令链用于获取运行 MSIE 6.0 的用户数量。我想知道为什么我得到的结果不同。

# following the professor's steps 
cut -f6 $log \
    | grep -v 'MSIE 8.0' \
    | grep -v 'MSIE 7.0' \
    | grep 'MSIE 6.0'    \
    | cut -d ';' -f2     \
    | uniq -c
# returns 169253`
# using grep -o seems like a more efficient solution to me?
cut -f6 $log \
    | grep -v 'MSIE 8.0' \
    | grep -v 'MSIE 7.0' \
    | grep -o 'MSIE 6.0' \
    | uniq -c
# returns 169760

如果我用它grep -o来获取有关任何其他浏览器的统计数据,我会得到与该特定浏览器完全匹配的条目数。我只是好奇为什么这些会有所不同。

答案1

这两个命令并不相同。

第一个命令通过删除输入的第一部分来减少可供比较的数据量。这显然产生了使输出中的更多行变得相同的净效果。由于这些线是相同的,所以它们只计算一次。

我认为,如果用 替换,uniq -cwc -l数会增加,但两种情况都会匹配。

相关内容