#powershell #csv #count
#powershell #csv #подсчет
Вопрос:
Я пытаюсь подсчитать, сколько раз список слов находится в столбце csv, где важно нулевое значение.
Этот код возвращает значение, только если слово находится в столбце csv, и я также хочу 0, если слова нет в столбце
Import-Csv C:UsersWork_PCDocumentsTATJulyStock.csv -Header Animal | where {$_.Animal -in $searchTerms} | Group-Object Animal -NoElement
Примеры stock.csv
Animal,Someothervalue,anothervalue,
Cow,1,2,
Sheep,1,3
Pig,1,4
Cow,1,2,
Sheep,1,3
Pig,1,4
Cow,1,2,
Cow,1,2,
Sheep,1,3
Pig,1,4
Cow,1,2,
пример $searchterms
Cow
Sheep
Pig
Horse
Donkey
Использование приведенного выше кода возвращает это значение
Count Name
----- ----
5 Cow
3 Sheep
3 Pig
Я хотел бы, чтобы он вернул
Count Name
----- ----
5 Cow
3 Sheep
3 Pig
0 Horse
0 Donkey
Спасибо
Ответ №1:
Group-Object не будет перечислять элементы, о которых он не знает.
Лично я бы использовал список поисковых терминов для создания объектов и присвоения значений, это также позволяет учитывать дополнительные данные, если требуется:
$SearchTerms = "Cow","Sheep","Pig","Horse","Donkey"
$GrpObjResults = Import-Csv C:UsersWork_PCDocumentsTATJulyStock.csv -Header Animal | where {$_.Animal -in $searchTerms} | Group-Object Animal -NoElement
$ObjProps = @{
Name = [String]
Count = [int]
}
$Results = @()
Foreach($Term in $SearchTerms){
$ListEntry = New-Object -TypeName PSObject -Property $ObjProps
$ListEntry.Name = $Term
$ListEntry.Count = ($GrpObjResults | Where {$_.Name -eq $Term}).Count
$Results = $ListEntry
}
$Results
Это даст желаемый результат:
Count Name
----- ----
5 Cow
3 Sheep
3 Pig
0 Horse
0 Donkey
Ответ №2:
Из вашего примера видно, что в файле CSV уже есть заголовки, поэтому вы можете просто повторить условия поиска и выполнить Select-Object
, чтобы получить то, что вы ищете:
$searchTerms = 'Cow','Sheep','Pig','Horse','Donkey'
$csv = Import-Csv 'C:UsersWork_PCDocumentsTATJulyStock.csv'
foreach ($term in $searchTerms) {
'' | Select-Object @{Name = 'Count'; Expression = {($csv | Where-Object {$_.Animal -eq $term}).Count}},
@{Name = 'Name'; Expression = {$term}}
}
Вывод:
Количество имен ----- ---- 5 Корова 3 Овцы 3 Свинья 0 Лошадь 0 Осел