PowerShell 文本处理实例(二) 2


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

李一 93
王二 83
王三 93
李四 60
王五 75
马六 61
孙七 75
刘八 75

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

李一 93
王三 93
王五 75
孙七 75
刘八 75

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

演示脚本

$scoreTables=@{}
$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是一个很有用的命令,只是有时候会突然想不起。正如一楼Victor.Woo兄的脚本一样,用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 } }
 #为了和源文件格式保持一直,加入格式化
本文链接: https://www.pstips.net/processing-text-2.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

回复 Victor.Woo 取消回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

2 条评论 “PowerShell 文本处理实例(二)