问题描述:
给出一段学生成绩文本文件如下:
李一 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
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
                                      请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

我的作业:
$total = cat .\a.txt | %{
[PSCustomObject]@{
Name = $_.split()[0]
Value = $_.split()[1]
}
}
$multiple = $total | group Value | ? { $_.Count -gt 1 }
$multiple | % { $_.Group | % { $_ } }
谢谢,已更新!