代码之家  ›  专栏  ›  技术社区  ›  ca9163d9

获取最常见的逗号计数、其行数和总行数

  •  0
  • ca9163d9  · 技术社区  · 12 年前

    我有以下脚本来获取文件中逗号的计数。

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

    脚本为每个文件返回以下行。如何获得每个文件最常见的逗号计数?对于下面的例子,我需要传递最多的逗号计数 77 ,行数 108 和合计行( 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
    .....
    
    2 回复  |  直到 12 年前
        1
  •  1
  •   latkin    12 年前

    您可以这样做,将相关的数据片段打包到每个文件的自定义对象中:

    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
         }
    }
    
        2
  •  1
  •   Keith Hill    12 年前

    如果我理解你的要求,你应该按计数(降序)对Group的输出进行排序,并选择第一个:

    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
    }