问题描述:
给出一段学生成绩文本文件如下:
李一 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 | % { $_ } }
谢谢,已更新!