Windows PowerShell妙用

       最近一次偶然的机会让我接触到了PowerShell,给我的感触很深,所以希望跟大家分享一下。先谈一下事情经过吧,我为什么会接触到PowerShell呢。一周以前,我所在的项目经历了一个月版上线。上线之后出了点问题,我和项目经理在生产机房操作间解决问题时,碰到了这样一个问题,我们系统通过数据仓库取了其他系统的数据一些表使用,每天每张表数据导入时都会生成相应的日志文件记录导入的数量。当我想查看所有日志文件中对应表导入数量的时候,我采取的做法是一个一个文件依次打开的方式。这时项目经理提到,要是有Linux环境就好了,我们可以将这批文件放在服务器上,通过grep命令快速筛选我们想要的内容。我说确实是啊,但是我们现在没有这个环境也没办法。此时项目经理告诉我,或许可以尝试使用Windows系统的PowerShell功能帮助我们。起初听到这个词的时候,我能大概猜到是一个命令行有关的东西。项目经理说它能在Windows下实现Linux grep命令的功能,随后他百度了具体用法后,果不其然地帮助我解决了问题。不得不说,项目经理是一个命令行达人。

       说下我们当时的场景吧。当时我手里边有几十个日志文件,每个日志文件中都有相同的关键字——“Rows are loaded.“用来显示没张表被导入的数据量。我希望统计出所有表被导入的数据量,最开始我使用的方式是一个一个文件打开找出里面被导入数据量的地方记录在另一个文件中。显然,这样做是很耗时的,效率低不说,而且可能出错。现在说一下后面我是如何使用PowerShell高效地达到这一目的的。因为现在没有当时的那批日志文件,所以以ok文件(也是文本文件)示例。现在我的桌面有一个data的文件夹,里面放了以很多日期命名的子文件下,子文件下有一批.data和.ok文件。.dat文件是数据文件,.ok文件是数据文件对应的记录文件,存有数据量信息。如下图所示:


       ok文件内容格式如下:路径名|记录数


       现在我希望提取出该文件夹下所有ok文件中的这个记录数输出到一个文件中,可以采用以下办法。

       Windows下有个PowerShell命令行,无需安装,直接内置系统当中。我们可以通过cmd进入PowerShell,如下图:


        然后我们可以使用cd命令进入到相应的文件目录下:


       接下来就是问题的关键了,我们知道Linux下有个grep命令,然而PowerShell下也有个类似的命令Select-String,最简单的用法是Select-String "匹配的内容" *.文件后缀 > 自定义文件名.自定义文件后缀,如我们需要提取每个ok文件内容中的记录数这一行(当然,这里只有一行,然后很多场景下内容不只一行),可以使用:Select-String ".dat" *.ok > ok.log,“>”和Linux系统中一样,表示重定向,这里是把提取的内容全部输出到一个ok.log文件当中,这里会自己帮我们创建该文件。

接下来我们在PowerShell里面输入该命令,然后回车:


       虽然没有任何提示,但我们可以去文件目录下看一下,发现生成了一个ok.log文件,打开文件,查看内容如下:

       可以看到,很轻易地就实现了我想要的功能,将所有文件中的关键内容提取到一个文件当中,而不用我们一个一个文件打开然后拷贝到统一的地方。

       我们时常会碰到这种问题,一堆文件的格式一样,只是里面的内容不一样。当我们需要提取其中的内容时,我们没必要依次打开所有文件去找出里面的部分内容。使用PowerShell可以很简单地解决这个问题,是不是极大地提高了生产力呢。当然,PowerShell下还有很多方便的功能,这就需要自己去学习和探索了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值