PowerShell中排序文本文件及计算平均年龄问题求助
问题分析与修正方案
你的代码存在语法和逻辑问题,以下是具体修正:
1. 计算平均年龄
原代码问题:
Get-Content默认按行读取文件并返回字符串数组,无需额外执行-split '\r?\n',且你写的-split单独一行属于语法错误,导致变量赋值未完成。- 每行是逗号分隔的字符串,不存在
.age属性,必须先拆分字符串提取年龄字段再转为整数。
修正代码:
# 计算平均年龄 $fileLines = Get-Content -Path C:\PowerShell\m22.txt $averageAge = $fileLines | ForEach-Object { [int]($_ -split ',')[2] } | Measure-Object -Average | Select-Object -ExpandProperty Average Write-Host "平均年龄: $averageAge"
2. 按姓氏排序(原代码可优化)
原代码这部分逻辑正确,可明确指定排序依据让代码更清晰:
# 按姓氏排序输出 Get-Content -Path C:\PowerShell\m22.txt | Sort-Object { ($_ -split ',')[0] }
3. 按年龄排序
原代码问题:变量赋值时的语法错误(-split 单独一行)导致 $fileLines 未正确获取所有行数据,因此仅显示部分内容。
修正代码(按年龄降序排序,输出完整行):
# 按年龄降序排序输出 $fileLines = Get-Content -Path C:\PowerShell\m22.txt $fileLines | Sort-Object -Descending { [int]($_ -split ',')[2] }
如果只需显示姓名(姓氏+名字)和年龄,可调整输出格式:
# 按年龄降序排序,仅显示姓名和年龄 $fileLines | ForEach-Object { $lastName, $firstName, $age = $_ -split ',' [PSCustomObject]@{ 姓名 = "$lastName $firstName" 年龄 = [int]$age } } | Sort-Object -Descending 年龄
内容的提问来源于stack exchange,提问作者ChosenLattice
相关产品推荐
相关产品推荐

