grep/sed/awk 在非常大的文件上的表现如何?

Luk*_*ord 6 performance grep sed awk text-processing

我想知道 grep、sed 和 awk 是否是在非常大的文件中查找数据的可行工具。

假设我有一个 1TB 的文件。如果我想处理该文件中的文本,如果我使用单独的命令 grep、sed 和 awk 并将它们混合在一起,时间框架会是什么样子。

显然,具体的答案是不可能的,因为结果会因硬件规格而异,但如果我能得到一个有用的一般估计。

rud*_*ier 6

一般来说我会说grep是最快的,sed也是最慢的。当然,这取决于你到底在做什么。我发现awk比sed.

如果您不需要真正的正则表达式而只需要简单的固定字符串(选项 -F),您可以加速 grep。

如果你想在管道中一起使用 grep、sed、awk,那么我会尽可能先放置 grep 命令。

例如这个:

grep -F "foo" file | sed -n 's/foo/bar/p'
Run Code Online (Sandbox Code Playgroud)

通常比这更快:

sed -n 's/foo/bar/p' file
Run Code Online (Sandbox Code Playgroud)

虽然grep第一行中的似乎没有必要。

顺便说一句,LC_ALL=C如果您正在处理简单的 ASCII 文本文件,您可以使用这些命令来加速。

请注意,我的所有经验都基于 gnu 命令。您也可以尝试不同的实现并比较速度。