我正在使用 grep 来计算文件 graph.tcl 中字符串“^mj”的出现次数。
我写的命令很简单,你很容易理解。
grep "^mj " mjwork/run/graph.tcl | wc -l
它输出
46625
但在 ~45 min
之后.你们能提出一个更好的方法来减少时间吗?
最佳答案
以下行可能会使其更快:
$ awk '/^mj/{c++}END{print c}' file
这只会处理文件一次,并且只会打印匹配的总数。这与您最初要求 grep 将所有内容打印到缓冲区并再次使用
wc
处理的情况相反。 .最后,你也可以这样做:
$ grep -c '^mj' file
它只返回总匹配。这可能比 awk 版本还要快。默认情况下,awk 将尝试进行字段拆分,上述 grep 不需要此操作。
有很多原因会导致您的进程运行缓慢、磁盘负载过重、使用它时 nfs 运行缓慢、需要解析的行非常长……没有关于输入文件和运行它的系统的更多信息,很难说为什么它这么慢。
关于unix - 为什么 grep 需要这么多时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7007791/