使用PowerShell统计TXT文件中路径二级动态字符串的出现次数
统计URL路径中第二位字符串的出现次数
核心思路
用**哈希表(字典)**实现高效计数:哈希表的键存提取到的动态字符串,值存对应出现次数,遍历完所有URL后,再将键值对格式化为字符串;次数写入结果文件。
具体实现步骤
- 初始化计数容器:创建空哈希表,用于存储字符串与对应次数的映射
- 逐行读取文件:避免一次性加载35万条数据到内存,逐行处理更节省资源
- 提取目标字符串并容错:拆分路径时移除空条目,同时判断路径格式是否合法,防止索引越界报错
- 更新计数:如果字符串已在哈希表中,计数+1;否则将计数初始化为1
- 输出结果:遍历哈希表,将键值对按要求格式拼接后写入文件
完整PowerShell脚本示例
# 初始化哈希表 $counts = @{} # 逐行读取URL文件,处理每一行 Get-Content -Path ".\urls.txt" | ForEach-Object { # 跳过空行 if ([string]::IsNullOrWhiteSpace($_)) { return } # 拆分路径,移除空条目(处理开头/结尾斜杠的情况) $pathParts = $_.Split("/", [System.StringSplitOptions]::RemoveEmptyEntries) # 确保路径至少有3段(比如images/STRINGA/xxx.jpg),避免索引越界 if ($pathParts.Length -ge 2) { $targetStr = $pathParts[1] # 更新计数 if ($counts.ContainsKey($targetStr)) { $counts[$targetStr]++ } else { $counts[$targetStr] = 1 } } } # 将统计结果格式化为"字符串;次数"并写入文件 $counts.GetEnumerator() | ForEach-Object { "$($_.Key);$($_.Value)" } | Out-File -Path ".\result.txt" -Encoding UTF8
额外优化提示
- 如果源文件编码不是默认ANSI,给
Get-Content加-Encoding参数指定编码(比如-Encoding UTF8) - 若要提升处理速度,可使用
-ReadCount 1000批量读取行后批量处理,但逐行处理35万条数据已足够流畅 - 可添加进度监控,比如每处理1万条打印一次状态,方便跟踪进度
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

