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

如何在Windows PowerShell中移除每行一个重复实例并按频率排序剩余行

需求说明

现有一个约1亿行短内容的未排序文本文件,示例内容如下:

Lucy 
Mary 
Mary 
Mary 
John 
John 
John 
Lucy 
Mark
Mary

需要完成两个核心操作:

  1. 移除每个相同行的一个实例
  2. 将剩余行按原文件中的重复次数从多到少排序(出现频率越高的行越靠前)

最终预期结果如下:

Mary 
Mary 
Mary 
John 
John 
Lucy

要求在Windows PowerShell中完成上述处理。

PowerShell实现方案

针对1亿行的大文件,必须兼顾内存效率和处理速度,以下是可行的命令实现:

Get-Content -Path "待处理文件路径.txt" -ReadCount 10000 | 
    ForEach-Object { $_ } |
    Group-Object -AsString |
    Sort-Object -Property Count -Descending |
    ForEach-Object {
        # 输出Count-1次当前行,即移除1个实例
        for ($i=0; $i -lt $_.Count -1; $i++) {
            $_.Name
        }
    } |
    Out-File -Path "处理结果文件.txt" -Encoding UTF8

关键步骤解释

  • 批量读取文件:Get-Content -ReadCount 10000 按10000行批量加载文件,避免一次性把1亿行塞进内存导致溢出。你可以根据机器内存情况调整这个数值,比如改成50000进一步提升效率。
  • 分组统计次数:Group-Object -AsString 把内容相同的行归为一组,同时自动统计每组的出现次数(存在Count属性里)。
  • 按次数降序排序:Sort-Object -Property Count -Descending 让出现次数多的分组排在前面。
  • 移除单个实例并输出:通过循环输出每组Count-1次内容,实现移除一个实例的需求。
  • 写入结果文件:Out-File直接把结果写入文件,避免输出到控制台拖慢处理速度,指定UTF8编码防止中文乱码。

额外优化建议

  • 运行64位PowerShell:32位版本内存上限较低,处理大文件容易卡顿,优先用64位版本。
  • 关闭不必要的后台程序:释放更多系统资源给PowerShell处理大文件。

内容的提问来源于stack exchange,提问作者tes389

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:55:15