我有以下数据
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(" "))}
但我似乎无法获得独特的数量。
答案 0 :(得分:3)
看起来mjolinor在我之前得到了它,但这是一种稍微不同的方法。
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
答案 1 :(得分:0)
这是使用正则表达式和哈希表的解决方案:
$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