哪一个处理速度更快?使用 Awk 或 Cut 打印列?

Ton*_*ony 3 unix awk

我有大约 1 亿行和 6 个由空格分隔的字段,每个字段都有七位数字。

我喜欢删除第二个字段,可以通过以下方式实现

1. awk '{print $1,$3,$4,$5,$6}' input.txt

2. cut --delimiter=' ' --fields=1,3-6 input.txt
Run Code Online (Sandbox Code Playgroud)

哪一个更快地获得所需的输出?有没有办法计时这个过程?

感谢您的帮助。

Sie*_*geX 5

有没有办法计时这个过程?

是的。time只需在代码之前添加命令,它就会返回花费的时间。为每一个人做这件事。

time awk '{print $1,$3,$4,$5,$6}' input.txt
time cut --delimiter=' ' --fields=1,3-6 input.txt
Run Code Online (Sandbox Code Playgroud)

通过快速的分析,看起来cut在这种情况下勉强胜出。awk考虑到它的能力已经增强了多少,这仍然是一个令人印象深刻的时刻cut

$ time for i in {1..1000}; do cut --delimiter=' ' --fields=1,3-6 >/dev/null <<<"one two three four five six seven"; done

real    0m4.074s
user    0m0.496s
sys     0m2.799s
Run Code Online (Sandbox Code Playgroud)

awk

$ time for i in {1..1000}; do awk '{print $1,$3,$4,$5,$6}' >/dev/null <<<"one two three four five six seven"; done

real    0m4.511s
user    0m0.728s
sys     0m3.165s
Run Code Online (Sandbox Code Playgroud)


Ale*_*ñoz 5

我\xc2\xb4ve测试过,结果是:

\n\n
\n

AWK 更快

\n
\n\n

我用大约 200 万行的文件进行了测试:

\n\n

它\xc2\xb4只是一个带有标准分隔符的剪切,并打印到文件。

\n\n

正如您所看到的,在这种情况下,AWK 的速度快了约 3 倍(您自己也尝试一下)

\n\n

示范:

\n\n
# wc -l prueba\n2088036 prueba    \n# cat test.sh\ndate +%s\nawk \'{print $2}\' prueba > ok\ndate +%s\ncut -d" " -f2 prueba > ok2\ndate +%s\n# ./test.sh\n1484848197\n1484848199\n1484848204\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里有一些关于使 awk 更快的原因的文档:

\n\n

http://www.linuxquestions.org/questions/programming-9/which-one-is-efficient-cut-cmd-or-using-awk-783673/

\n\n

https://lyness.io/the-function-and-performance-differences-of-sed-awk-and-other-unix-parsing-utilities

\n\n

希望能帮助到你

\n