我有一个以制表符分隔的文件。我想要一个powershell脚本来计算每行中的选项卡数量。我想出了这个:
${C:\tabfile.txt} |% {$_} | Select-String \t | Measure-Object | fl count
它产生3,这是文件中的行数。
指出我做错了什么?我希望它为文件中的每一行打印一个数字。
答案 0 :(得分:6)
您的代码存在一些问题,但它们都围绕分组/数组管理/嵌套循环。
gc test.txt | % { ($_ | select-string `t -all).matches | measure | select count }
答案 1 :(得分:5)
第一次尝试,不是很复杂:
gc .\tabfile.txt | % { ($_ -split "`t").Count - 1 }
利用这里的事实,当我在制表符字符处拆分字符串时,我会得到一个数组,其中包含的项目多于该行中的制表符。
另一种避免分割线的方法:
gc .\tabfile.txt | % { ([char[]] $_ -eq "`t").Count }
字符串可以转换为char[]
(也有ToCharArray()
方法),然后我通过返回所有匹配的项而不是布尔值来使用比较运算符对集合的工作方式不同的事实。因此比较会返回一个数组,其中包含原始行中的所有选项卡,我只需从中获取项目数。
答案 2 :(得分:4)
如果您正在运行V2,还有另一种选择。
select-string \t c:\tabfile.txt -All |
%{"$($_.matches.count) tabs on $($_.LineNumber)"}
答案 3 :(得分:2)
另一种选择:
$content = Get-Content file.txt | Out-String
[regex]::matches($content,"\t").count