我有两个包含许多重复行的文本文件。我想运行一个powershell语句,该语句将仅在第一个文件中没有值的情况下输出一个新文件。下面是两个文件的示例。
File1.txt
-----------
Alpha
Bravo
Charlie
File2.txt
-----------
Alpha
Echo
Foxtrot
在这种情况下,只有Echo和Foxtrot不在第一个文件中。因此,这些将是理想的结果。
OutputFile.txt
------------
Echo
Foxtrot
我查看了下面的链接,该链接与我想要的链接相似,但这并未将结果写入输出文件。
答案 0 :(得分:2)
这里是一种方法:
# Get unique values from first file
$uniqueFile1 = (Get-Content -Path .\File1.txt) | Sort-Object -Unique
# Get lines in second file that aren't in first and save to a file
Get-Content -Path .\File2.txt | Where-Object { $uniqueFile1 -notcontains $_ } | Out-File .\OutputFile.txt
答案 1 :(得分:1)
使用引用链接中的方法将起作用,但是,对于原始文件中的每一行,它将触发从磁盘读取第二个文件。根据文件大小,这可能会很痛苦。我认为以下方法可以满足您的需求。
$file1 = Get-Content .\File1.txt
$file2 = Get-Content .\File2.txt
$compareParams = @{
ReferenceObject = $file1
DifferenceObject = $file2
}
Compare-Object @compareParams |
Where-Object -Property SideIndicator -eq '=>' |
Select-Object -ExpandProperty InputObject |
Out-File -FilePath .\OutputFile.txt
此代码执行以下操作:
Compare-Object
的参数创建一个哈希表(有关更多信息,请参见about_Splatting)Out-File
如果您对它的整体流程感到满意,并且仅在一次性情况下使用它,则可以将整个东西压缩成单线。
(Compare-Object (gc .\File1.txt) (gc .\File2.txt) | ? SideIndicator -eq '=>').InputObject | Out-File .\OutputFile.txt