从CSV文件中删除行

时间:2013-09-02 13:25:55

标签: powershell csv

我有一个类似

的.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

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值的记录。