0

ファイル内のコンマの数を取得する次のスクリプトがあります。

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

カウント名グループ                                                                             
----- ---- -----                                                                             
  108 77 {@{LineNumber=1; カウント=77}、@{LineNumber=2; カウント=77}、@{LineNumber=3; カウント=77...
    8 78 {@{LineNumber=7; カウント=78}、@{LineNumber=15; カウント=78}、@{LineNumber=22; カウント=...
    5 79 {@{LineNumber=16; カウント=79}、@{LineNumber=32; カウント=79}、@{LineNumber=37; カウント...

File2.txt
.....
4

2 に答える 2

1

あなたが何を求めているのか理解できたら、Groupの出力をCount(降順)で並べ替えて、最初の出力を選択する必要があります。

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
}
于 2013-02-20T00:17:30.247 に答える
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
     }
}
于 2013-02-20T00:18:54.257 に答える