Подсчитайте запятую в каждой строке и покажите номера строк в текстовом файле.

Я использую следующий скрипт для подсчета запятых.

Get-Content .\myFile | 
% { ($_ | Select-String `, -all).matches | measure | select count } | 
group -Property count

Он возвращается,

Count Name   Group
----- ----   -----
  131 85     {@{Count=85}, @{Count=85}, @{Count=85}, @{Count=85}...}
    3 86     {@{Count=86}, @{Count=86}, @{Count=86}}

Могу ли я показать номер строки в столбце Group вместо @{Count=86}, ...?

В файлах будет много строк, и в большинстве строк будет одна и та же запятая. Я хочу сгруппировать их, чтобы выходные строки были меньше


person ca9163d9    schedule 14.02.2013    source источник


Ответы (1)


Можете ли вы использовать что-то вроде этого?

$s = @"
this,is,a
test,,
with,
multiple, commas, to, count,
"@

#convert to string-array(like you normally have with multiline strings)
$s = $s -split "`n"

$s | Select-String `, -AllMatches | Select-Object LineNumber, @{n="Count"; e={$_.Matches.Count}} | Group-Object Count

Count Name                      Group                                                                                                        
----- ----                      -----                                                                                                        
    2 2                         {@{LineNumber=1; Count=2}, @{LineNumber=2; Count=2}}                                                         
    1 1                         {@{LineNumber=3; Count=1}}                                                                                   
    1 4                         {@{LineNumber=4; Count=4}} 

Если вы не хотите, чтобы свойство count использовалось несколько раз в группе, вам нужны настраиваемые объекты. Так:

$s | Select-String `, -AllMatches | Select-Object LineNumber, @{n="Count"; e={$_.Matches.Count}} | Group-Object Count | % {
    New-Object psobject -Property @{
        "Count" = $_.Name
        "LineNumbers" = ($_.Group | Select-Object -ExpandProperty LineNumber) 
    }
}

Выход:

Count    LineNumbers 
-----    ----------- 
2         {1, 2}   
1         3   
4         4 
person Frode F.    schedule 14.02.2013
comment
В файлах будет много строк, и в большинстве строк будет одна и та же запятая. Я хочу сгруппировать их, чтобы выходные строки были меньше. - person ca9163d9; 14.02.2013