Powershell,比较2个文件以查找两个文件中唯一条目的数量

时间:2015-09-23 04:53:09

标签: powershell

我有2个文件。

的内容
id 231 and id 232

我正在尝试编写一个脚本,输出两个文件和File 1 is: 4,22,1,2,3,14,12,13. File 2 is: 1,50,2,12,3,6,9. 中的总唯一条目。我目前正在使用:

total unique numbers in file 1 and file 2

这是两个文件中的唯一条目总数,但我无法弄清楚如何查找文件1和文件2中的唯一条目总数。

我希望输出类似于:

$howmany = compare-object $(get-content C:\test\file1.txt) $(get-content C:\test\file2.txt)
Write-Host "Total unique entries in both files is:" $howmany.Count

2 个答案:

答案 0 :(得分:1)

这使用AsHashTable和AsString参数返回哈希表中的组,即作为键值对的集合。

在生成的哈希表中,每个属性值都是一个键,组元素是值。因为每个键都是哈希表对象的属性,所以可以使用点表示法来显示值。

$unique = $howmany | Group-Object -Property sideindicator -AsHashTable  -AsString

File1中 由于输出是一个数组,-join运算符用于连接每个数字以形成一个字符串

($unique.'<=' | Select-Object -ExpandProperty inputobject) -join ','

文件2

($unique.'=>' | Select-Object -ExpandProperty inputobject) -join ','

File1 - 计算唯一项目

($unique.'<=' | Select-Object -ExpandProperty inputobject).count

File2 - 计算唯一项目

($unique.'=>' | Select-Object -ExpandProperty inputobject).count

答案 1 :(得分:0)

(我知道你有一个接受的答案,我只是想写一个替代方案。我不能按照我试图接近它的方式使它工作,但这很接近。)

function uniques {param($a,$b) $a|? {$b -notcontains $_}}

$f1 = (gc C:\test\file1.txt) | select -unique
$f2 = (gc C:\test\file2.txt) | select -unique

Write-Host "Total unique entries in both files is: $(($f1+$f2 |select -Unique).Count)"

Write-Host "Total unique entries in file 1 is: $((uniques $f1 $f2).Count)"
Write-Host "Total unique entries in file 2 is: $((uniques $f2 $f1).Count)"
Write-Host "Unique numbers in file 1 are: $(uniques $f1 $f2)"
Write-Host "Unique numbers in file 2 are: $(uniques $f2 $f1)"

NB。如果其中一个文件包含重复的数字,那么您的初始代码以及@ Kiran的答案会有错误。例如如果file1包含4,22,1,2,3,14,12,13,4且其中包含重复的4,则您将获得5 unique numbers - 4,22,14,13,4。这就是为什么这两个文件在阅读时都有|select -unique的原因。

NB。如果文件只有一个数字,或者只有一个唯一编号,我的版本可能会失败。 @()围绕事情确保它们在数组中保持不变。