我有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
答案 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。如果文件只有一个数字,或者只有一个唯一编号,我的版本可能会失败。 @()
围绕事情确保它们在数组中保持不变。