1

我有一个 .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
4

1 回答 1

3

尝试这个:

$userlist = Import-Csv $file2 | % { $_.Initials }

Import-Csv $file1 | ? { $userlist -contains $_.Initials } | Export-Csv $file3

第一行从第二个CSV的Initials列创建一个数组。使用该数组,您可以使用运算符从第一个CSV中选择具有匹配值的记录。-containsInitials

于 2013-09-02T14:08:42.337 回答