gpt4 book ai didi

powershell - 计算CSV中的唯一数字(PowerShell或Notepad++)

转载 作者:行者123 更新时间:2023-12-03 00:23:58 24 4
gpt4 key购买 nike

如何在CSV文件中查找唯一数字的计数?当我在PowerShell ISE中使用以下命令时

1,2,3,4,2 | Sort-Object | Get-Unique

我可以获得唯一的编号,但是无法将其用于CSV文件。例如,如果我使用
$A =  Import-Csv C:\test.csv | Sort-Object | Get-Unique
$A.Count

它返回0。我想为给定文件夹中的所有文件计算唯一编号。

我的数据看起来像这样:

Col1,Col2,Col3,Col4
5、7、4
0,,9,
3,5,4

结果应为6个唯一值(最好写在同一CSV文件中)。

还是使用Notepad ++会更容易?到目前为止,我仅发现了有关如何计算唯一行的示例。

最佳答案

您可以尝试以下(PSv3 +):

PS> (Import-CSV C:\test.csv |
ForEach-Object { $_.psobject.properties.value -ne '' } |
Sort-Object -Unique).Count
6
  • 关键是从每个输入对象(CSV行)中提取所有属性(列)值,这就是$_.psobject.properties.value所做的;
  • -ne ''过滤出空值。
  • 请注意,由于Sort-Object具有-Unique开关,因此您不需要Get-Unique(仅当输入已经排序时才需要Get-Unique)。


  • 就是说,如果您的CSV文件的结构与您一样简单,则可以通过将其读取为文本文件(PSv2 +)来加快处理速度:
    PS> (Get-Content C:\test.csv | Select-Object -Skip 1 | 
    ForEach-Object { $_ -split ',' -ne '' } |
    Sort-Object -Unique).Count
    6
  • Get-Content读取CSV文件为一行字符串。
  • Select-Object -Skip 1跳过标题行。
  • $_ -split ',' -ne ''用逗号将每一行拆分为多个值,并清除空值。


  • 至于 您尝试了什么:
    Import-CSV C:\test.csv | Sort-Object | Get-Unique:
  • 从根本上来说,Sort-Object会整体发出输入对象(仅按排序顺序),它不会提取属性值,但这正是您所需要的。
  • 因为没有将-Property参数传递给Sort-Object来进行排序,所以它通过它们的Import-Csv值(恰好为空)比较.ToString()整体发出的自定义对象[1]
    ,因此它们的比较结果相同,实际上不会进行排序。
  • 同样,在这里Get-Unique也通过.ToString()来确定唯一性,因此,再次将所有对象视为相同,并且仅输出第一个对象。


  • [1]这可能令人惊讶,因为在可扩展字符串中使用自定义对象确实会产生一个值:compare $obj = [pscustomobject] @{ foo ='bar' }; $obj.ToString(); '---'; "$obj"。在 this GitHub issue中讨论了这种不一致。

    关于powershell - 计算CSV中的唯一数字(PowerShell或Notepad++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51350353/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com