首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >powershell中的分组/计数

powershell中的分组/计数
EN

Stack Overflow用户
提问于 2014-05-15 17:26:26
回答 2查看 54关注 0票数 0

我有以下数据

代码语言:javascript
复制
SBA SUBJECT1 3138L3BK0|31.4|44.4
SBA SUBJECT1 3138L3BK1|31.4|44.4
SBA SUBJECT1 3138L3BK2|31.4|44.4
SBA SUBJECT1 3138L3BK0|31.4|44.4
SBA SUBJECT2 3138L3BK3|31.4|44.4
SBA SUBJECT2 3138L3BK3|31.4|44.4
SBA SUBJECT2 3138L3BK3|31.4|44.4
SBA SUBJECT2 3138L3BK4|31.4|44.4

我需要以下结果

代码语言:javascript
复制
SBA SUBJECT 1, Count = 3
SBA Subject 2, Count = 2

逻辑是。

  1. 接受管道分隔行中的第一列。
  2. 根据最后一个空格将字符串分成两个部分
  3. 按第一部分分组和第二部分中唯一项目的返回计数

到目前为止,我有以下代码

代码语言:javascript
复制
$p= import-csv filename.txt -delimiter "|" -Header ("cusip")
$p | Group {$_.cusip.Substring(0,$_.cusip.LastIndexOf(" "))}

但我似乎无法得到唯一的计数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-15 18:08:27

下面是使用regex和散列表的解决方案:

代码语言:javascript
复制
$ht=@{} 

get-content filename.txt | 
 foreach {
   $_ -match '^(\S+\s\S+)\s([^|]+)' > $null
   $ht[$Matches[1]] += @($Matches[2])
   }
$ht.keys | foreach {
 [PSCustomObject]@{Name= $_;Count=($ht[$_] | Get-Unique).count}
  } | ft -auto
票数 0
EN

Stack Overflow用户

发布于 2014-05-15 18:14:46

看上去比我先找到了,但这是个稍微不同的方法。

代码语言:javascript
复制
gc FileName.txt | ?{$_ -match "^(SBA SUBJECT(?:1|2)).*?\|([^|]+?)\|(.*)"} | %{
    New-Object PSObject -Property @{
        CUSIP=$Matches[1]
        Col1=$Matches[2]
        Col2=$Matches[3]
    }
}|Group CUSIP|FT Name,Count -AutoSize
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23684939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档