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

ユーザー名がfile2にないfile1から行を削除しようとしています。
したがって、私の出力は次のようになります:(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

最初の行はInitials、2番目のCSV の列から配列を作成します。その配列を使用すると、演算子を使用して、最初のCSVから一致する値を持つ-containsレコードのみを選択できます。Initials

于 2013-09-02T14:08:42.337 に答える