21. PowerShell -- 文本处理

  • PowerShell 文本处理

实例一:求所有电阻值的个数,平均值,总和,最大值,最小值。

问题描述:

有如下一段文本文件,开头有许多描述,字符“~”为有用数据的开始标志,要求:求所有电阻值的个数,平均值,总和,最大值,最小值。

这是一份格式较为规则的文本文件报表。

#文件头有一些无用的描述信息

~

深度         电阻值      放射性值

10            1.5            2.4

20            0.4            1.9

30            2.5            0.5

40            1.3

50            3.1

先不解释,直接贴脚本:


#加载文件,并过滤空行

$fullText=Get-Content .\a.txt | where { !([string]::IsNullOrWhiteSpace($_))}

#寻找文件头开始标志

$startFlagIndex=-1

For ($i = 1; $i -lt $fullText.Length; $i++)

{

if($fullText[$i].Contains("~"))

{

$startFlagIndex=$i

break

}

}

#去掉文件头

$fullText=$fullText | Select-Object -Skip ($startFlagIndex+1)

<#

#将文件转换成CSV格式,然后再从CSV转换成对象

#几经周折后,再要深入进行数据处理,将会变得非常方便

#>

$objs=$fullText | foreach{

$tokens= $_.Split(‘ ‘,[StringSplitOptions]::RemoveEmptyEntries)

‘"{0}"‘ -f [string]::Join(‘","‘,$tokens)

} | ConvertFrom-Csv

#统计放射性值为空的对象

Write-Host "统计放射性值为空的对象"

$objs | where { $_.放射性值 -ne $null } | Format-Table -AutoSize

#求所有电阻值的个数,平均值,总和,最大值,最小值

Write-Host "求所有电阻值的个数,平均值,总和,最大值,最小值:"

$objs |  Measure-Object -Property 电阻值-Average -Sum -Maximum -Minimum

输出示例:

统计放射性值为空的对象

深度电阻值放射性值

-- --- ----

10 1.5 2.4

20 0.4 1.9

30 2.5 0.5

求所有电阻值的个数,平均值,总和,最大值,最小值:

Count    : 5

Average  : 1.76

Sum      : 8.8

Maximum  : 3.1

Minimum  : 0.4

Property : 电阻值

回过头再看,脚本完全可以优化为一个foreach循环,每行文本只遍历一次。之所以多次一举,是为了演示分析问题的过程。同样也能得出一个结论,如果可以尽最大可能从数据源拿到CSV文件格式的数据,PowerShell处理起来更方便,一行搞定!

实例二:要求打印出成绩相同的学生及成绩。

问题描述
给出一段学生成绩文本文件如下:

李一 93

王二 83

王三 93

李四 60

王五 75

马六 61

孙七 75

刘八 75

要求打印出成绩相同的学生及成绩。

李一 93

王三 93

王五 75

孙七 75

刘八 75

问题分析:
第一遍遍历,先须要一张哈希表保存各个成绩的出现的次数。
第二遍遍历,将成绩出现次数大于2的名单打印。

演示脚本:

[email protected]{}

$stus=Get-Content .\ScoresFile.txt |

foreach {

$stu=$_ -split " "

if($scoreTables.ContainsKey($stu[1]))

{

$scoreTables[$stu[1]]++

}

else {

$scoreTables[$stu[1]]=1

}

@{ Score=$stu[1];Name=$stu[0] }

}

$stus | where {

$scoreTables[$_.Score] -gt 1

} | foreach {"{0} {1}" -f $_.Name,$_.Score }

用group-object实现统计,比较完美,稍作整理,也贴在这里:

Get-Content .\a.txt | ForEach-Object {

[PSCustomObject]@{

Name = $_.split()[0]

Value = $_.split()[1]

}

} | Group-Object Value | Where-Object { $_.Count -gt 1 }|

ForEach-Object { $_.Group | ForEach-Object { "{0} {1}" -f $_.name,$_.value } }

#为了和源文件格式保持一直,加入格式化

实例三:将原始文本转换成对象

原始文本

”data1″:111,”data2″:22,”data3″:3,”data4″:4444444,”data5″:589

要求:转换成对象

$rawTxt=‘"data1":111,"data2":22,"data3":3,"data4":4444444‘

$rawTxt -split ‘,‘ | ForEach-Object {

$temp= $_ -split ‘:‘

"{0}={1}" -f $temp[0].Substring(1,$temp[0].Length-2),$temp[1]

} | ConvertFrom-StringData

实例四:提取CSV文件中的域名

有一个CSV文件,其中包含了成千上万的URL链接,每个链接都可能是完整路径包含了文件夹,变量等。希望提取出其中的域名以便于进行深度分析。
我的CSV文件只有一列:

"http://www.pstips.net/diff-with-currentculture-and-currentuiculture.html"

"http://www.pstips.net/tag/powershell-v3"

"http://www.pstips.net/powershell-download-files.html"

"http://www.notelee.com/cs0012-the-type-system-object-is-defined-in-an-assembly-that-is-not-referenced.html"

"http://www.notelee.com/scom-create-wmi-perf-rule.html"

"http://www.lonsoon.com/2013/04/94.html"

"http://www.lonsoon.com/2013/05/101.html"

期望的输出结果:

www.pstips.net

www.pstips.net

www.pstips.net

www.notelee.com

www.notelee.com

www.lonsoon.com

www.lonsoon.com

分析:可以利用Import-csv命令,因为csv文件没有标题,需要临时指定标题。然后利用.NET中的类System.Uri

PS> Import-Csv .\file.csv -Header "link" | foreach  { ( [uri]($_.link) ).Host }

参考:

http://www.pstips.net/processing-text-1.html

时间: 2024-11-03 20:51:59

21. PowerShell -- 文本处理的相关文章

(21)Powershell中的通配符

使用通配符进行文件的模糊查找 Powershell 中的通配符可以实现模糊查找, 也就是说可以对一组项(而不是单个项)进行查找.例如,如果想查找 D:\MyPowerShell 目录中所有扩展名为 .ps1 的文件,可以执行以下命令: PS C:\> Get-ChildItem D:\MyPowerShell\*.ps1     目录: D:\MyPowerShell Mode                LastWriteTime     Length Name ----          

6月21 百度文本编辑器

百度文本编辑器的下载版本:需要引入ueditor.config.js和ueditor.all.min.js和lang/zh-cn/zh-cn.js 使用时将下载好的ueditor文件包放到www文件的目录下,并根据自己的需要选择以下的按钮 以下是html代码部分: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd&quo

24. PowerShell -- 使用特殊文本命令

PowerShell 使用特殊文本命令 -- 字符串操作 格式化操作符 –F 在PowerShell文本操作符中非常重要,经常被用来增强数字类型和日期类型的可读性: "{0} diskettes per CD" -f (720mb/1.44mb) 500 diskettes per CD 所有的基本操作符形式都大同小异,要处理的数据位于操作符的左右两边,然后通过操作符建立连接.例如,你可以使用下面的语句将文本中指定的字符串替换成目标文本: "Hello Carl" 

iOS之UI--富文本总结

文章内容大纲 1.NSMutableAttributedString的基本使用 2.NSMutableAttributedString的简易封装 3.使用开源代码GOBMarkupPaser处理富文本 4.UITextKit简介 5.编程思想的相关思考 前言 富文本使用案例: 这里我自己也用了富文本实现了简单的却也是常用的例子: 对于最后面的¥50中划线这种设置,估计只有富文本最好用了. 在IOS或者Mac OS X通过UIKit提供的用来显示字符串控件有三个: UILable,UITextFi

转载的一个富文本,挺实用的

文章内容大纲 1.NSMutableAttributedString的基本使用 2.NSMutableAttributedString的简易封装 3.使用开源代码GOBMarkupPaser处理富文本 4.UITextKit简介 5.编程思想的相关思考 前言 富文本使用案例: 这里我自己也用了富文本实现了简单的却也是常用的例子: 对于最后面的¥50中划线这种设置,估计只有富文本最好用了. 在IOS或者Mac OS X通过UIKit提供的用来显示字符串控件有三个: UILable,UITextFi

iOS之富文本总结

文章内容大纲 1.NSMutableAttributedString的基本使用 2.NSMutableAttributedString的简易封装 3.使用开源代码GOBMarkupPaser处理富文本 4.UITextKit简介 5.编程思想的相关思考 前言 富文本使用案例: 这里我自己也用了富文本实现了简单的却也是常用的例子: 对于最后面的¥50中划线这种设置,估计只有富文本最好用了. 在IOS或者Mac OS X通过UIKit提供的用来显示字符串控件有三个: UILable,UITextFi

掌握iOS8中的动态文本

原文链接 : Swift Programming 101: Mastering Dynamic Type in iOS 8 原文作者 : Kevin McNeish 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转载权,未经允许,不得转载! 译者 : kmyhy Apple声称鼓励第三方App能够支持动态文本.但是,如果你尝试在App中实现这个特性,你会发现其中有很多坑(例如静态cell和定制cell样式).在本文中,我们将介绍动态文本的机理以及

SpannableUtil,Android复合文本的使用

前些天有个大神告诉我,你写这么多TetxtView实际上就实现了一个TextView的功能. 我说我要设置background,textsize,textcolor阿,还有各种点击事件,一个TextView怎么能实现呢? 他丢给了我一个TextViewUtil文件,我稍稍看了下,里面主要用到了 SpannableString 这个神奇的东西. 于是就想深究一下这个SpannableString到底怎么去使用,都有哪些神奇的功能呢? 一边学习.一边写demo.一边看效果-- 我写了这么个工具类,里

第二天:网页的基本制作

2016-7-19 22:27-23:50 1-7 设置默认图像文件夹 之前建立的站点的文件夹里面建立个专门放图片的文件夹images 这是放置图片的文件夹的命名 (文件夹的名字不能用中文,会导致图片无法显示) 而后,在DW里面显示站点的位置,点击文件下拉,有个管理站点-高级设置-本地信息-默认图像位置-images 然后,新建网页,插入图片,之后会发现插入的图片已经自动保存在images里面了,这样就解决了复制网页, 无法显示图片的问题. 1-8 站点的管理 在“文件”面板中实现以下操作 选择