如何使用powershell计算文件中的连续字符串?
因此,我想知道如何从文件中获取内容,并计算该文件中字符串的连续出现次数? 因此,我的文件具有以下字符串:如何使用powershell计算文件中的连续字符串?,powershell,count,unique,uniq,Powershell,Count,Unique,Uniq,因此,我想知道如何从文件中获取内容,并计算该文件中字符串的连续出现次数? 因此,我的文件具有以下字符串: 1 1 1 0 0 0 0 1 1 1 0 1 1 0 0 0 1 0 1 1 1 0 0 现在的问题是,我对powershell几乎一无所知,但我了解bash,因此如果有人同时了解这两个方面,这就是我想要的效果: [me@myplace aaa8]$ cat fule1|uniq -c 3 1 4 0 3 1 1 0 2 1
1
1
1
0
0
0
0
1
1
1
0
1
1
0
0
0
1
0
1
1
1
0
0
现在的问题是,我对powershell几乎一无所知,但我了解bash,因此如果有人同时了解这两个方面,这就是我想要的效果:
[me@myplace aaa8]$ cat fule1|uniq -c
3 1
4 0
3 1
1 0
2 1
3 0
1 1
1 0
3 1
2 0
如果可能,还可以添加相当于sort-hr
:D的powershell
[me@myplace aaa8]$ cat fule1|uniq -c|sort -hr
4 0
3 1
3 1
3 1
3 0
2 1
2 0
1 1
1 0
1 0
基本上,它告诉我我的文件有4个零的最长条纹,等等
powershell有没有办法做到这一点?powershell相当于
uniq
实用程序,不幸的是,没有与前者的-c
选项等效的方法来预先设置连续重复行数(从powershell v6.2开始)
注意:增强Get Unique
以支持类似-c
-like的功能以及由提供的其他功能是本主题
因此,您必须推出自己的解决方案:
function Get-UniqueWithCount {
begin {
$instanceCount = 1; $prevLine = $null
}
process {
if ($_ -eq $prevLine) {
++$instanceCount
} elseif ($null -ne $prevLine) {
[pscustomobject] @{ InstanceCount = $instanceCount; Line = $prevLine }
$instanceCount = 1
}
$prevLine = $_
}
end {
[pscustomobject] @{ InstanceCount = $instanceCount; Line = $prevLine }
}
}
上述函数接受来自管道的输入(在进程{…}
块中,对象按对象显示为$\ucode>)。
它将每个对象(线)与前一个对象(线)进行比较,如果它们相等,则增加实例计数;一旦找到不同的行,前一行连同其实例计数一起作为具有属性InstanceCount
和line
的对象输出。end{…}
块输出相同连续行的最后一个块的最终输出对象。
看
然后按如下方式调用它:
Get-Content fule | Get-UniqueWithCount
这将产生:
InstanceCount Line
------------- ----
3 1
4 0
3 1
1 0
2 1
3 0
1 1
1 0
3 1
2 0
InstanceCount Line
------------- ----
4 0
3 1
3 1
3 0
3 1
2 1
2 0
1 0
1 1
1 0
由于Get UniqueWithCount
可以方便地输出我们可以对其类型化属性进行操作的对象,因此以降序(反向)排列(-r
)的sort-hr
(按嵌入的数字排序)(-h
)的等效方法很简单:
这将产生:
InstanceCount Line
------------- ----
3 1
4 0
3 1
1 0
2 1
3 0
1 1
1 0
3 1
2 0
InstanceCount Line
------------- ----
4 0
3 1
3 1
3 0
3 1
2 1
2 0
1 0
1 1
1 0
可以是这样的:[regex]::匹配('aaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbccc',“()\1+”).Groups | Where Object{$\长度-gt 1}|排序对象-唯一-属性值
与[RegexOptions]:多行
任务选项组合<代码>测量对象
命令也可能有用。我不确定您的输入数据大小以及正则表达式的工作速度。@Rabash:uniq-c
不排除单个实例,因此您的解决方案无法工作。一般来说,未来的读者从完整的答案中获益最多,而不是评论中的(半)解决方案