Powershell 中的数组减法问题
Issue with Array subtraction in Powershell
我有两个 CSV 如下:
A
20180809000
20180809555
20180809666
20180809777
20180809888
文件 2:
A
20180809000
20180809555
20180809666
20180809777
我想找出 File1 - File2 的差异,应该输出 20180809888
。我尝试了以下方法:
$a1= Import-Csv -Path $file1 | select A
$a2 = Import-Csv -Path $file2 | select A
$a1| where {$a2 -notcontains $_}
但它输出整个文件 1:
A
--------------
20180809000
20180809555
20180809666
20180809777
20180809888
我也试过交集,但输出为空。
您的最后一行应如下所示:
$a1.A.where{$_ -notin $a2.A}
要保留该列,您可以对最后一行执行以下操作:
$a1.where{$_.A -notin $a2.A}
这种情况的问题是如果第二个文件比第一个文件有更多的数据。然后你需要为你的最后一行做这样的事情:
$a1 | compare $a2 | select -expand inputobject
select A
仍将 return 一个对象 属性 命名为 A
.
# Returns an object list with property A
Import-Csv -Path $file | select A # (shorthand for Select-Object -Property A)
# A
# ---
# value1
# value2
# ...
您可以使用点符号获取 属性 A
的值数组,例如:
# Returns the list of values of the A property
(Import-Csv -Path $file).A
# value1
# value2
# ...
以下应该有效:
$a1= (Import-Csv -Path $file1).A
$a2 = (Import-Csv -Path $file2).A
$a1 | where {$a2 -notcontains $_}
最简单的解决方案是使用:
> Compare-Object (Get-Content .\File1.csv) (Get-Content .\File2.csv) -PassThru
20180809888
或使用 Import-Csv
> Compare-Object (Import-Csv .\File1.csv).A (Import-Csv .\File2.csv).A -Passthru
20180809888
或
> (Compare-Object (Import-Csv .\File1.csv) (Import-Csv .\File2.csv) -Passthru).A
20180809888
我有两个 CSV 如下:
A
20180809000
20180809555
20180809666
20180809777
20180809888
文件 2:
A
20180809000
20180809555
20180809666
20180809777
我想找出 File1 - File2 的差异,应该输出 20180809888
。我尝试了以下方法:
$a1= Import-Csv -Path $file1 | select A
$a2 = Import-Csv -Path $file2 | select A
$a1| where {$a2 -notcontains $_}
但它输出整个文件 1:
A
--------------
20180809000
20180809555
20180809666
20180809777
20180809888
我也试过交集,但输出为空。
您的最后一行应如下所示:
$a1.A.where{$_ -notin $a2.A}
要保留该列,您可以对最后一行执行以下操作:
$a1.where{$_.A -notin $a2.A}
这种情况的问题是如果第二个文件比第一个文件有更多的数据。然后你需要为你的最后一行做这样的事情:
$a1 | compare $a2 | select -expand inputobject
select A
仍将 return 一个对象 属性 命名为 A
.
# Returns an object list with property A
Import-Csv -Path $file | select A # (shorthand for Select-Object -Property A)
# A
# ---
# value1
# value2
# ...
您可以使用点符号获取 属性 A
的值数组,例如:
# Returns the list of values of the A property
(Import-Csv -Path $file).A
# value1
# value2
# ...
以下应该有效:
$a1= (Import-Csv -Path $file1).A
$a2 = (Import-Csv -Path $file2).A
$a1 | where {$a2 -notcontains $_}
最简单的解决方案是使用:
> Compare-Object (Get-Content .\File1.csv) (Get-Content .\File2.csv) -PassThru
20180809888
或使用 Import-Csv
> Compare-Object (Import-Csv .\File1.csv).A (Import-Csv .\File2.csv).A -Passthru
20180809888
或
> (Compare-Object (Import-Csv .\File1.csv) (Import-Csv .\File2.csv) -Passthru).A
20180809888