powershell - 比较两个 CSV 的相似字符串
问题描述
我目前正在尝试比较两个 CSV。doc1 有 5000 个字符串,doc2 有 100 个字符串。doc2 中的每个字符串都以“admin”结尾。我想比较 doc1 和 doc2 并找到匹配到“admin”点的所有字符串。
举个例子:
doc1 中的字符串
doc1 admin 中的字符串
它将这两个输出到一个新的 CSV
results = foreach ($OU in $OUs) {
Get-ADGroup -SearchBase $OU -Filter * -Properties CanonicalName,Created,Description,ManagedBy,Member,MemberOf,Members,ObjectGUID,whenChanged |
? {($_.ManagedBy -like $null) -and ($_.Description -notlike "*owner*") -and ($_.CanonicalName -notlike "*admin")}
}
$results | select CanonicalName,Description,ManagedBy,Member,MemberOf,Members,ObjectGUID,Created,whenChanged |
Export-Csv .\doc1.csv -NoTypeInformation
$results0 = foreach ($OU in $OUs) {
Get-ADGroup -SearchBase $OU -Filter * -Properties CanonicalName,Created,Description,ManagedBy,Member,MemberOf,Members,ObjectGUID,whenChanged |
? {($_.ManagedBy -like $null) -and ($_.Description -notlike "*owner*") -and ($_.CanonicalName -like "*admin")}
}
$results0 | select CanonicalName,Description,ManagedBy,Member,MemberOf,Members,ObjectGUID,Created,whenChanged |
Export-Csv .\doc2.csv -NoTypeInformation
$csvPath1 = ".\doc1.csv"
$csvPath2 = '.\doc2.csv'
$propertyToCompare = 'CanonicalName'
$csv1 = Import-Csv -Path $csvPath1
$csv2 = Import-Csv -Path $csvPath2
$duplicates = Compare-Object $csv1 $csv2 -Property $propertyToCompare -ExcludeDifferent -PassThru | Select-Object -ExpandProperty $propertyToCompare
$csv1 | Where-Object { $_.$propertyToCompare -in $duplicates } | Export-Csv -Path .\AdminsAndNotAdminsInOneFile.csv -NoTypeInformation
使用 Compare-Object 我不知道如何让它忽略 doc2 中字符串中的最后几个字符。有什么方法可以让我修改字符串吗?
解决方案
您可以利用Compare-Object
支持计算属性作为比较属性的事实(这里只传递了一个脚本块 ( {...}
),与传递相同
@{ Expression = { ... } }
):
Compare-Object $csv1 $csv2 -ExcludeDifferent -IncludeEqual -PassThru -Property {
$_.$propertyToCompare -replace ' admin$'
} | Select-Object -ExpandProperty $propertyToCompare
请注意,-PassThru
确保输入对象被传递,在比较相等的对象的情况下,这意味着LHS ( $csv1
) 对象被传递。
对每个输入对象求值的表达式, $_.$propertyToCompare -replace ' admin$'
使用正则表达式替换属性值的末尾 ( ) ;如果该字符串不存在,则按原样使用该值。admin$
' admin'
$
$propertyToCompare
实际上,对象被比较,就好像尾随' admin'
不存在一样。
推荐阅读
- docker - RUN curl 在 dockerfile 中失败,但可以从命令行运行
- html - 如何在 wordpress 上编码这个 html
- javascript - JavaScript 标头和原型
- c - 如何做一个将文件中单词的第一个字符大写的 C 程序?
- java - Selenium Grid:“找不到此机器的非环回 ip4 地址”和“发生了非法反射访问操作”
- filesystems - 如何在具有 256KB 擦除扇区的闪存芯片上使用文件系统
- c# - 将大型数据集加载到网格视图 - UWP
- laravel - InvalidArgumentException 路由未定义
- python - Django 通用类视图模型更改
- xamarin.forms - 如何在 Xamarin.Forms 中更改条目光标颜色