2017-03-22 66 views
-1

我是新的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

我已經編輯我的問題。我忘了包括我的數據中有其他列。 –

回答

2

此代碼可以幫助你。

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

謝謝你的幫助。我想,我得到的輸出只是所有名稱的Message_Count總數。 –

0

假設輸入文件正是你是如何呈現的呢,那麼我們就需要做一些工作,把它放在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

謝謝! :)我要測試這一個。 –

1

下面摘錄也給出了相同的結果

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

謝謝! :)我要測試這一個。 –