是否有可能编写一个比Perl中的等效脚本更快的shell脚本?

前端之家收集整理的这篇文章主要介绍了是否有可能编写一个比Perl中的等效脚本更快的shell脚本?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Perl和 shell中编写了多个脚本,并且比较了实际的执行时间.在所有情况下,Perl脚本比shell脚本快10倍以上.

所以我想知道是否有可能编写一个比Perl中的同一个脚本更快的shell脚本?虽然我在Perl脚本中使用system函数,为什么Perl比shell更快?

解决方法

有几种方法可以让你的shell(例如Bash)执行得更快.

>如果Bash的内部可以执行任务,请尝试使用较少的外部命令
为了你.例如,对字符串/文本过度使用sed,grep,awk等
操纵.
>如果您正在操作相对较大的文件,请不要在读取循环时使用bash.
使用awk.如果您正在操作真正的BIG文件,可以使用grep搜索所需的模式,然后将它们传递给awk以“编辑”. grep的搜索算法非常好而且快速.如果您只想获得文件的前端或末尾,请使用head和tail.
>文件操作工具,如sed,cut,wc等都可以完成
使用一个awk脚本或使用Bash内部,如果不复杂.因此,您可以尝试减少这些功能重叠的工具的使用.
Unix管道/链接非常好,但使用了太多,
例如
命令| grep | grep | cut | sed使你的代码变慢.每根管子都是架空的.
对于这个例子,只有一个awk可以完成它们.
命令| awk'{在这里做一切}’
您可以使用的最接近的工具,它可以匹配Perl的某些任务的速度,例如字符串操作或数学,是awk.这是this solution的有趣基准.文件中有大约900万个数字

产量

$head -5 file
1
2
3
34
42
$wc -l <file
8999987

# time perl -nle '$sum += $_ } END { print $sum' file
290980117

real    0m13.532s
user    0m11.454s
sys     0m0.624s

$time awk '{ sum += $1 } END { print sum }' file
290980117

real    0m9.271s
user    0m7.754s
sys     0m0.415s

$time perl -nle '$sum += $_ } END { print $sum' file
290980117

real    0m13.158s
user    0m11.537s
sys     0m0.586s

$time awk '{ sum += $1 } END { print sum }' file
290980117

real    0m9.028s
user    0m7.627s
sys     0m0.414s

对于每次尝试,awk都比Perl快.

最后,尝试学习awk超出他们作为一个衬里所能做的事情.

猜你在找的Perl相关文章