我有一个类似
的.CSV文件(file1)Initials,Size excl. Backup/Pst,Number of warnings
USER1,100,1
USER10,1000,1
USER12,1100,1
USER13,1200,1
我有另一个看起来像
的.CSV文件(file2)Initials,Size excl. Backup/Pst
USER1,100
USER4,400
USER10,1000
USER11,1100
我正在尝试从file1中删除行,其中用户名不在file2中 所以我的输出应该是:( USER12和USER13从文件中删除,因为它们不在file2中)
Initials,Size excl. Backup/Pst,Number of warnings
USER1,100,1
USER10,1000,1
这就是我所拥有的
$ArrayDB1 = $file1 | Import-Csv | Select-Object Initials
$ArrayUSERS = $file2 | Import-Csv | Select-Object Initials
$ArrayDiff = Compare-Object ($ArrayDB1) ($ArrayUSERS1) -Property Initials |
Where-Object { $_.SideIndicator -eq '<=' } |
Select-Object Initials
这给了我($ArrayDiff
):
Initials
--------
USER12
USER13
到目前为止一切顺利。但是当我尝试使用下面的
从file1中删除它时Select-String $file1 -Pattern $ArrayDiff -NotMatch |
select -Expand line |
Out-File "file3.log"
file3只是给了我file1中的什么。什么都没有删除:
Initials,Size excl. Backup/Pst,Number of warnings
USER1,100,1
USER10,1000,1
USER12,1100,1
USER13,1200,1
答案 0 :(得分:3)
试试这个:
$userlist = Import-Csv $file2 | % { $_.Initials }
Import-Csv $file1 | ? { $userlist -contains $_.Initials } | Export-Csv $file3
第一行从2 nd CSV的Initials
列创建一个数组。使用该数组,您可以使用-contains
运算符从1 st CSV中选择具有匹配Initials
值的记录。