使用管道符在PowerShell中进行各种数据操作
最近在培训PowerShell,在讲到Pipeline的时候,对于我这种长期和数据(数据库)打交道的人来说,觉得很实用,所以写此博文,记录一下。
无论是在Linux中写Bash脚本还是在Window上写PowerShell,管道符”|“是一个非常有用的工具。它提供了将前一个命令的输出作为下一个命令的输入的功能。在数据处理中,我们也可以使用管道符对数据进行各种操作。
Import&Export导入导出
先说导入导出是为了能够为接下来的数据处理准备数据。在PowerShell中我们也可以通过各种Get-XXX命令获得各种各样需要的数据,但是并不是所有操作系统和各个版本的PowerShell都支持某个命令的。比如Get-Volume命令,用于获得每个磁盘的信息,但是这个命令不能在Win7下运行,只能在Win8或Win2012Server下运行。
最常见,最简单的外部数据源就是CSV文件了。我们可以使用Export-Csv命令将PowerShell中的对象转换为CSV格式,持久化到磁盘上。比如我们将当前的所有进程信息导出为CSV文件,命令为:
(注意,如果是有中文内容建议设置Encoding为Unicode或者UTF8)
Import-Csv命令是导入外部的CSV文件到内存。比较刚才导出的CSV文件,我们接下来要对这个文件进行处理。我们可以将文件的内容保存到变量$data中。命令为:
当然,我们也可以先进行类型转换,然后保存。命令为:
Sorting排序
前面我们已经将CSV的内容载入到$data变量中了,那么如果我们要按照某一个字段排序,可以使用Sort-Object命令。
比如我们要Name这个字段排序,并输出排序后的结果,那么命令为:
也可以简写为:
如果是需要多个字段排序,那么可以将字段列在后面,字段之间用逗号隔开。
如果是逆向排序,那么需要在字段后面加参数-Descending
Selecting选取
选取相当于SQL中的SELECT命令。对应的PowerShell命令是Select-Object,可以简写为Select。该命令后面跟上要选取的列名即可。如果是要选取所有的列,也可以使用*表示。
选取所有列,那么命令就是:
如果是只选取前面几条数据,那么可以使用-First参数。比如我们按Handles排序,只查看头10条进程记录的名字和Handles。命令为:
另外还有参数-Last选取的是最后几条记录,-Skip可以选择跳过一定记录。
Calculate计算列
在SELECT的时候,我们可以使用函数对其中的列进行运算,使用的语法是:
n='New Column Name';
e={ $_.xxxCalc }
}
其中的$_就是表示当前的记录。
比如VM列记录的是以Byte为单位的数据,我们先新建一列名为”VM(MB)”,其值是换算成MB的结果,那么我们可以写为:
Measuring度量
说度量可能有点不是很清晰,其实就是对应SQL中的聚合函数。比如 SUM, Max,Min之类的,需要使用Measure-Object命令。比如要查看有多少个程序,最小的Handles和最大的Handles,那么命令是:
既然说到SQL中的聚合函数,那么自然就会想到另外一个关键字Group By。在PowerShell中也有对应的命令Group-Object。如果我们想要按进程的Name进行分组,查看每个进程名对应的VM总大小。那么我们可以先按Name进行Group:
这时我们可以看到系统返回的结果有3列:Count,Name,Group。而我们要进行聚合的VM值是在Group中。这时需要用到前面提到的Select命令。
Filter过滤
过滤相当于SLQ中的Where语句,在PowerShell中使用Where-Object命令。可以简写为Where,甚至可以简写为”?”。在普通程序里面我们遇到的比较运算和逻辑运算在PowerShell中有所不同,是这样的参数:
Comparison |
Case-InSensitive |
Case-sensitive |
Equality |
-eq |
-ceq |
Inequality |
-ne |
-cne |
Greater than |
-gt |
-cgt |
Less than |
-lt |
-clt |
Greater than or equal to |
-ge |
-cge |
Less than or equal to |
-le |
-cle |
Wildcard equality |
-like |
-clike |
-and 和-or用于逻辑运算。
仍然以前面load的$data为例,我们要查看以W开头的进程的Handles和Name,那么命令为:
如果是多个条件,既要以w开头,还要VM大于100M的进程,那么命令为:
Enumeration枚举
枚举相当于C#中的Foreach函数,或者说是SQL中的游标,对于每一行数据,都进行一个运算或者函数处理。在PowerShell中对应的命令是ForEach-Object,可以简写为ForEach,还可以进一步简写为”%“。
比如我们要将VM改为MB为单位,可以对每一行数据进行运算:
运行该命令后我们再查看$data就会发现VM列已经改变了。
另外对于Foreach命令,还有两个比较有用的参数-Begin –End,用于在做For循环之前调用和循环结束后调用。
比如我们想把某一列写入一个文件,我们可以在-Begin时创建文件,记录开始的时间,然后Foreach中Append内容到文件,最后把结束时间写入:
转载于:https://www.cnblogs.com/studyzy/p/4518807.html
使用管道符在PowerShell中进行各种数据操作相关推荐
- python查看dataframe数据类型_python pandas中DataFrame类型数据操作函数的方法
python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...
- python dataframe函数_python pandas中DataFrame类型数据操作函数的方法
这篇文章主要介绍了关于python pandas中DataFrame类型数据操作函数的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 python数据分析工具pandas中Data ...
- mysql遍历resultset_java中ResultSet遍历数据操作
1.查找数据库中表的列名 String sql = "select *from tblmetadatainfo"; ResultSet rs = MySqlHelper.execu ...
- Spring中集成ActiveRecordPlugin数据操作插件
2019独角兽企业重金招聘Python工程师标准>>> ###Spring集成ActiveRecordPlugin数据操作插件 package com.yunhetong.mq.se ...
- Python—pandas中DataFrame类型数据操作函数
python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFram ...
- 批量读入一个文件夹中文件的数据操作实例
批量处理 > coo = dir("test") > path = "/panfs/TC_FUN/USER/group3/yanzengli/other/st ...
- ROR中简单的数据操作
有两张表Group:id,name Acticle:id,name,group_id 现在在Article页面中通过group_id来获取Group.name 代码如下: Article.find(@ ...
- Pandas模块中的DataFrame数据操作
Pandas模块对于二维数据表的操作非常方便,尤其是能够实现类似于数据库中的SQL语句的功能,方便了对数据的增删查改.下面举例说明DataFrame数据的基本操作. 为了便于理解,对于每种操作,均列出 ...
- 从Powershell发送样式化HTML电子邮件(在Powershell中使用.NET DLL)
介绍 (Introduction) I have written a small mail sending function in .NET that I leverage in all my sys ...
最新文章
- 倒计时2天 | 专属技术人的盛会,为你而来!
- php万能注入密码,php下的SQL注入万能用户名和密码
- [密码学] RSA利用解密指数分解n
- jQuery元素过滤
- mysql数据库入门教程(8):数据的基本类型
- C语言,你真的弄懂了么?
- 网易云音乐刷听歌量_「PC端」解锁网易云音乐灰色歌曲,让你听歌不用东跑西跑...
- 【Kafka】kafka 卡死 Discovered coordinator xx:9092 (id: xxx rack: null) for group xxx
- memsql 多节点部署
- Office 2010下载安装
- 【QT】QT网络编程简介
- 【互联网大厂研究】让千千万万底层人民脱贫致富的【快手】,他有何等魔力?
- 1214_嵌入式硬件常识积累_什么是TTL电平
- php开发微信会员系统,PHP实例:微信公众号实现会员卡领取功能
- c语言中千分号的用法,在ChemDraw中输入千分号的教程
- mybatis-generator同名表的处理
- A计划:基础架构软件创业之道分享实录
- 周金涛生前20篇雄文精华,一文尽览
- DBA之路:小小DBA一年工作总结
- 计算机专业考研390分是什么水平,考研初试390分被淘汰,复试到底发生了什么?...
热门文章
- java channelexec_java-使用SSH exec通道调用Shell脚本,但忽略对其他Shell脚本的调用
- ipsec ip替换_点到多点ipsec-vpn NAT穿透和固定IP共存
- jwt如何防止token被窃取_JWT令牌
- python打印二进制内容,Python字节不打印二进制
- 电脑光驱不读盘_维修电脑找电脑维修君
- [POJ 1222] EXTENDED LIGHTS OUT
- CVPR 2018 RASNet:《Learning Attentions: Residual Attentional Siamese Network for Tracking》论文笔记
- hdu5443(2015长春网络赛G题)
- hdu5387(模拟)
- php输出一百个hello,如何使用 PHP 输出 hello world?