我有以下数据
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我需要以下结果
SBA SUBJECT 1, Count = 3
SBA Subject 2, Count = 2逻辑是。
到目前为止,我有以下代码
$p= import-csv filename.txt -delimiter "|" -Header ("cusip")
$p | Group {$_.cusip.Substring(0,$_.cusip.LastIndexOf(" "))}但我似乎无法得到唯一的计数。
发布于 2014-05-15 18:08:27
下面是使用regex和散列表的解决方案:
$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发布于 2014-05-15 18:14:46
看上去比我先找到了,但这是个稍微不同的方法。
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 -AutoSizehttps://stackoverflow.com/questions/23684939
复制相似问题