Select-String搜索字符串性能问题

      今天在一个脚本中需要用到“select-string”用来查找关键字,脚本很容易就写好了,但是在运行该脚本的时候却发现要将近20秒才能完成,执行效率太低了,仔细把脚本从头到尾看了一遍,觉得问题就是出在“select-string”身上,因为这其中要遍历的文本文件有6MB多大小。

      因为在脚本中很多地方需要在前一句命令的执行结果中查找关键字,为了方便,都是直接通过管道符将结果传给了“select-string”进行搜索,这样的搜索结果也很容易进行二次加工,如下:

netstat -an |select-string "ESTABLISHED"

TCP    192.168.1.12:49228     223.202.36.52:80       ESTABLISHED

    所以在对文本文件进行遍历的时候也使用的这种方法,如下:

$dt = Get-Date

$infor = Get-Content d:\setup.log |select-string "failed"

(New-TimeSpan $dt).totalseconds

16.0019152

      结果脚本运行时间为16秒多。

      既然这样的执行效率很低,那换另一种方法试试呢,直接多文件进行查找,如下:

$dt = Get-Date

$infor = Select-String -path d:\setup.log -Pattern "failed"

(New-TimeSpan $dt).totalseconds

0.3910224

      脚本运行时间才不到0.4秒,两种方法相差了了足足40倍之多。

      在第一种方法中,先是使用了“Get-Content”获取文本文件的内容,然后才使用“Select-String”进行搜索,是不是在使用“Get-Content”获取文本文件内容的时候耗时较长呢?于是又做了下面一个试验,如下:

$dt = Get-Date

$infor = Get-Content d:\setup.log

(New-TimeSpan $dt).totalseconds

 

$dt2 = Get-Date

$infor2 = $infor|select-string "failed"

(New-TimeSpan $dt2).totalseconds

2.5481458

15.052861

      两条语句的执行时间一个是2秒多,另一个是15秒多,可见其耗时都远远多于直接使用“Select-String”对文件进行遍历,在以后我们应该尽量避免使用第一种方法遍历文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值