我正在为 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 -c
行wc -l
数会增加,但两种情况都会匹配。