我有我的PowerShell脚本的这一部分,我目前仍然坚持。基本上,我有两个文件,我想在via select-string上进行比较...详细说明
对于FileA.txt中的每个项目,我想对FileB.txt执行select-string以发现它是否存在。如果FileA.txt中的行项目不存在于FileB.txt中,则将FileA.txt行项目打印到屏幕。
这是文本文件的样子。或多或少
FileA.txt
1
2
3
4
6
FileB.txt
6
7
8
9
10
所需的输出如下:
1
2
3
4
这就是我的PS代码现在的样子。我的思考过程是我可以在select-string中使用变量,但它不适合我:(
$IPs = Get-Content "C:\\FileA.txt"
Get-Content C:\FileB.txt | Select-String -InputObject $IPs
有人可以帮助我,指出我做错了什么。
答案 0 :(得分:2)
根据您有限的样本数据,以下是您可以执行此操作的示例:
"1 2 3 4 6" > "fileA.txt"
"6 7 8 9 10" > "fileB.txt"
$arrayA = (Get-Content "fileA.txt").Split(" ")
$arrayB = (Get-Content "fileB.txt").Split(" ")
$arrayResult = @()
foreach($valueA in $arrayA) {
if($arrayB -notcontains $valueA) {
$arrayResult += $valueA
}
}
$arrayResult -join " "
现在我相信输入文件最终将会完全不同
编辑:
使用换行符:
"1
2
3
4
6" > "fileA.txt"
"6
7
8
9
10" > "fileB.txt"
$arrayA = Get-Content "fileA.txt"
$arrayB = Get-Content "fileB.txt"
$arrayResult = @()
foreach($valueA in $arrayA) {
if($arrayB -notcontains $valueA) {
$arrayResult += $valueA
}
}
$arrayResult -join "`n"
注意:2个脚本首先填写所需的文件,我想你不需要这样做
答案 1 :(得分:2)
在这个具体的例子中,Compare-Object可能是更好的选择。它旨在找出两个列表之间的差异。
你会使用类似的东西:
Compare-Object -ReferenceObject $(gc .\FileA.txt) -DifferenceObject $(gc .\FileB.txt) | where { $_.SideIndicator -eq '<=' } | select -expand InputObject
但是,您也可以使用select-string:
执行此操作gc .\FileA.txt | select-string -Pattern $(gc .\FileB.txt) -NotMatch
它只找到与FileB的行不匹配的FileA行,但FileB的行被解释为正则表达式,这可能不适合IP地址,因为&#39;。 &#39;是一个通配符。