时间命令之间的执行时间差异

时间命令之间的执行时间差异

据我了解,为获得所需输出而执行的命令越多,执行时间就越长。

让我们看一下:

time find /opt/platforms/ -name '*trading*cfg' | xargs grep SenderCompID | awk -F= '{print $2};

real    0m0.008s
user    0m0.000s
sys     0m0.000s

这是一个很好的执行时间。

我美化了这句丑陋的台词:

time find /opt/platforms/ -name '*trading*cfg' -exec grep SenderCompID {} \; | awk -F= '{print $2}'

real    0m0.076s
user    0m0.004s
sys     0m0.008s

即使我减少了一根管子并使用了find -exec,时间还是长了一点。

我更进一步,只使用 find,没有任何管道:

time find /opt/platforms/ -name '*trading*cfg' -exec sed -n '/SenderCompID/s/.*=\(.*\)/\1/p' {} \;

real    0m0.076s
user    0m0.008s
sys     0m0.012s

“更糟糕”的结果。

假设我在一个已安装的网络设备中,这可能是时间的 10 倍,并且微小的差异将是显着的。

有人可以解释一下看似更有效的命令如何花费最长的执行时间吗?谢谢

答案1

你的“美化”使执行时间变得更糟。该程序xargs将调用grep多个文件,同时-exec将调用grep每个文件(您可以验证是否将其替换grepecho)。如果grep每次调用期间可以处理多个文件,则调用次数会更少(不需要启动,没有调用开销)。如果您调用sed而不是 ,则同样成立grep

相关内容