加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 22:05:41 所属栏目:大数据 来源:网络整理
导读:我在Perl和 shell中编写了多个脚本,并且比较了实际的执行时间.在所有情况下,Perl脚本比shell脚本快10倍以上. 所以我想知道是否有可能编写一个比Perl中的同一个脚本更快的shell脚本?虽然我在Perl脚本中使用system函数,为什么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超出他们作为一个衬里所能做的事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读