You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:51:35