如何在PowerShell中对比两个文件并输出共同的单词/字符串?
PowerShell提取两个文件的共有单词
实现思路
分别读取两个文件内容,拆分出所有单词/字符串,再通过集合操作提取两者的交集。
具体命令
方法1:使用Compare-Object(兼容低版本PowerShell)
# 读取文件内容,按非单词字符拆分(自动去除标点)并过滤空字符串 $wordsA = Get-Content "a.txt" | ForEach-Object { $_ -split '\W+' } | Where-Object { $_ } $wordsB = Get-Content "b.txt" | ForEach-Object { $_ -split '\W+' } | Where-Object { $_ } # 提取共有单词并去重 Compare-Object $wordsA $wordsB -IncludeEqual -ExcludeDifferent | Select-Object -ExpandProperty InputObject
方法2:使用HashSet(高效处理大文件)
# 读取并拆分单词,存入HashSet(忽略大小写,如需区分则移除第二个参数) $setA = [System.Collections.Generic.HashSet[string]]::new( (Get-Content "a.txt" | ForEach-Object { $_ -split '\W+' } | Where-Object { $_ }), [System.StringComparer]::OrdinalIgnoreCase ) $setB = [System.Collections.Generic.HashSet[string]]::new( (Get-Content "b.txt" | ForEach-Object { $_ -split '\W+' } | Where-Object { $_ }), [System.StringComparer]::OrdinalIgnoreCase ) # 计算交集并输出 $setA.IntersectWith($setB) $setA
自定义调整说明
- 拆分规则:如果不需要去除标点,将
-split '\W+'改为-split '\s+'(仅按空白字符拆分)。 - 大小写敏感:移除HashSet构造中的
[System.StringComparer]::OrdinalIgnoreCase参数,即可区分大小写。
内容的提问来源于stack exchange,提问作者user24165515
相关产品推荐
相关产品推荐

