【问题标题】:PowerShell hash table or array for comparing strings用于比较字符串的 PowerShell 哈希表或数组
【发布时间】:2012-09-29 02:44:47
【问题描述】:

我正在尝试从路径名的文本文件中查找文件夹名称在唯一目录中拆分的频率。所以使用这个数据集我想要以下结果:

  1. 数据

    • C:\Project_1\Models\MapShedMaps\randomfilename.txt
    • C:\Project_1\Models\MapShedMaps\randomfilename.txt
    • C:\Project_1\Models\MapShedMaps\randomfilename.txt
    • C:\Project_2\Models\MapShedMaps\randomfilename.txt
    • C:\Project_3\Models\MapShedMaps\randomfilename.txt
    • C:\Project_3\Models\MapShedMaps\randomfilename.txt
    • C:\Project_3\Models\MapShedMaps\randomfilename.txt
  2. 结果

    • Project_1 = 1
    • Project_2 = 1
    • Project_3 = 1
    • 型号 = 3
    • MapShedMaps = 3

我的第一个想法是使用 Get-Content 和 ForEach-Object 将每个单词从路径中拆分出来,并将它们存储在一个保持计数的哈希表中。为了停止复制,我正在考虑一个数组或另一个哈希表来存储 currnet 对象在该点上的路径......这一切都在那里分崩离析。我不确定存储路径的“父”成员的最佳方法是什么,以便知道它是否是一个独特的事件。任何关于如何做到这一点的建议都会很棒。

更新:

好的,我正在考虑类似于哈希表 $SAVE 并计算每个 unqiue 值,数组 $PREVIOUS 是管道中的最后一个对象,数组 $HAVESEEN 是从一开始就捕获管道。

所以如果字符串被破坏,第一个对象将是 C,下一个是 Project_1,C 被移动到 $PREVIOUS 和 $HAVESEEN。我将尝试将其写下来,但我不确定如何在哈希表和数组之间传递所有这些内容。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    对于初学者,您可以通过对路径进行分组来获得前 3 个结果项,然后计算其他值:

    PS> Get-Content .\file.txt | Group-Object -NoElement
    
    Count Name
    ----- ----
        3 C:\Project_1\Models\MapShedMaps\randomfilename.txt
        1 C:\Project_2\Models\MapShedMaps\randomfilename.txt
        3 C:\Project_3\Models\MapShedMaps\randomfilename.txt
    

    【讨论】:

    • 摆脱文件系统的压力是不可能的。它至少有多个网络驱动器和超过 1000 万个目录。解析word文件似乎更有可能。
    • 您可以获取目录列表并将它们转储到文件中,通过管道传输到 select-object 或 sort-object 并指定 -Unique 开关确实删除重复项,然后尝试上述操作。
    • 您将不得不对此进行扩展,我不会知道唯一的开关,它是数百万个目录。
    • 将所有路径导出到文件后,您读取它并丢弃重复项:'get-content paths.txt |选择 -unique',或使用排序:'get-content paths.txt |排序-唯一的'。然后你可以通过管道来分组对象。
    猜你喜欢
    • 2011-03-27
    • 2015-03-07
    • 1970-01-01
    • 2021-03-26
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    相关资源
    最近更新 更多