计数值为相同的ID

问题描述:

我是新的Powershell和我试图自动化一个单调乏味的任务,我通常会做,并会真的很感激它,如果你能够帮助我或给任何想法如何完成我目标。计数值为相同的ID

基本上我有一个CSV文件看起来是这样的:

Name | Message | Date  | Time 
------ | ------ | ------ | ----- 
John | Good | 1/1/2001 | 1:00 PM 
John | Bad  | 1/2/2002 | 2:00 AM 
Frank | Better | 1/3/2003 | 3:00 PM 
Frank | Best | 1/4/2004 | 4:00 AM 
Mike | Great | 1/5/2005 | 5:00 PM 
Mike | Perfect | 1/6/2006 | 6:00 AM 
Mike | Awesome | 1/7/2007 | 7:00 PM 

,我试图实现将看起来像这样的输出:

Name | Message_Count 
------ | ------ 
John | 2 
Frank | 2 
Mike | 3 

到目前为止,我可以只删除重复项,但我无法弄清楚如何计算相应名称上的消息。

+0

我已经编辑我的问题。我忘了包括我的数据中有其他列。 –

此代码可以帮助你。

Import-Csv <CSV File> | 
Group-Object Name | 
Select-Object @{Name='Name'; Expression={$_.Values[0]}}, 
       @{Name='Message_Count'; Expression={$_.Count}} 
+0

谢谢你的帮助。我想,我得到的输出只是所有名称的Message_Count总数。 –

假设输入文件正是你是如何呈现的呢,那么我们就需要做一些工作,把它放在PowerShell中可以识别为CSV格式。我已经适应mfatih的代码来做到这一点:

Get-Content file.txt | 
    % { $_ -replace "\s*\|\s*","|" } | # Get rid of the spaces around the fields 
    ConvertFrom-Csv -Delimiter '|' | # Use "|" as the delimiter. 
    ? Name -notmatch '^-+$' |   # Skip the "------" row. 
    Group-Object Name | 
    Select-Object @{Name='Name'; Expression={$_.Values[0]}}, 
        @{Name='Message_Count'; Expression={$_.Count}} 

输出:

Name Message_Count 
---- ------------- 
John    2 
Frank    2 
Mike    3 
+0

谢谢! :)我要测试这一个。 –

下面摘录也给出了相同的结果

import-csv 'Input Path' | Group-Object Name | Select-Object Name,count 
+0

谢谢! :)我要测试这一个。 –