2013-02-19 29 views
0

我有以下腳本來獲取文件中的逗號計數。獲取最常用的逗號計數,其行數和總行數

ls | select -First 10 | 
% { 
    $_.FullName; 
    cat $_ | Select-String `, -AllMatches | 
    Select-Object LineNumber, @{ n = "Count"; e = { $_.Matches.Count }} | 
    Group-Object Count 
} 

該腳本爲每個文件返回以下行。我如何獲得每個文件最常用的逗號計數?至於下面的例子,我需要通過最逗號計數,行數和總行(108 + 8 +5 = 121)到另一個程序。

 
File1.txt 

Count Name      Group                    
----- ----      -----                    
    108 77      {@{LineNumber=1; Count=77}, @{LineNumber=2; Count=77}, @{LineNumber=3; Count=77... 
    8 78      {@{LineNumber=7; Count=78}, @{LineNumber=15; Count=78}, @{LineNumber=22; Count=... 
    5 79      {@{LineNumber=16; Count=79}, @{LineNumber=32; Count=79}, @{LineNumber=37; Count... 

File2.txt 
..... 

回答

1

你可以做這樣的事情,封裝數據的相關作品到每個文件的自定義對象:

ls | select -First 10 | 
% { 
    $numLines = 0 
    $grouped = cat $_ ` 
       |%{ $numLines++; $_ } ` 
       | Select-String ',' -AllMatches ` 
       | Select-Object LineNumber, @{ n = "Count"; e = { $_.Matches.Count }} ` 
       | Group-Object Count ` 
       | sort Count -Desc 

    [PsCustomObject] @{ 
     File = $_.FullName 
     TopCommaCount = [int] $grouped[0].Name 
     TopCommaCountLines = [int] $grouped[0].Count 
     TotalLines = $numLines 
    } 
} 
1

如果我理解你的要求,你應該排序計數(降序)輸出組,並選擇第一個:

ls | select -First 10 | 
% { 
    $_.FullName; 
    cat $_ | Select-String `, -AllMatches | 
    Select-Object LineNumber, @{ n = "Count"; e = { $_.Matches.Count }} | 
    Group-Object Count | Sort Count -Descending | Select-Object -First 1 
} 

要測量的行數用逗號:

ls | select -First 10 | 
% { 
    $_.FullName; 
    cat $_ | Select-String `, -AllMatches | 
    Select-Object LineNumber, @{ n = "Count"; e = { $_.Matches.Count }} | 
    Measure-Object Count 
} 
+0

這是一種獲取每個文件的總行數的方法嗎? – ca9163d9 2013-02-20 00:27:32