最近一次偶然的机会让我接触到了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下还有很多方便的功能,这就需要自己去学习和探索了。
相关推荐
在这个“Shell的妙用”主题中,我们将深入探讨如何利用Shell函数来调用IE(Internet Explorer)的属性窗口,并结合给定的文件名列表来进一步理解其在实际项目中的应用。 首先,让我们了解什么是Shell。Shell是操作...
3. **任务管理器的妙用**:除了结束进程,任务管理器还可以监控CPU、内存、硬盘和网络的使用情况,帮助找出资源占用过高的应用。 4. **电源管理**:根据工作环境,可以在“控制面板”中调整电源计划,如“平衡”和...
Netstat 命令的使用方法和妙用 Netstat 命令是 Windows 操作系统中一个非常实用的命令,用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,主要用于检验本机各端口的网络连接情况。下面将详细介绍 Netstat 命令...
在Windows中,我们通常使用“命令提示符”或“PowerShell”;在Linux和Mac OS中,常见的命令行工具是“Terminal”。 易语言是一款以中文为编程语言的开发环境,它的语法简洁明了,非常适合初学者。在"命令行的妙用....
《Jupyter Notebook安装指南》 在当今数据科学和机器学习领域,Jupyter Notebook是一个不可或缺的工具,它提供了交互式...随着经验的积累,你会发现更多Jupyter Notebook的妙用,进一步提升你的数据处理和分析能力。