2017-08-24 5 views
0

特定のCSVでアイテムをフィルタリングする方法を理解しようとしています。フィルタCSVキャリッジリターン

CSVの内容は:

ComputerName,Results 
computerA  ," KB00000 is not installed 
c:\SomeTestFile Version is 2 
c:\SomeTestFile Version is 11.0" 
ComputerB ,%windir%\somefile.exe is Version 1.2 

私はそれが2列目の最初のキャリッジリターンに基づいてフィルタリングし、その後アウト「KB00000が欠落している」「version10である」等の異なるパラメータをフィルタリングする必要があります。 CSVで

意図された出力:コーディングブロックを有する

ComputerName,Results 
computerA ,c:\SomeTestFile Version is 2 
computerA ,c:\SomeTestFile Version is 11.0 
ComputerB ,%windir%\somefile.exe is Version 1.2 

。私はファイルをインポートすることができますが、フィルタリングに固執しています。あなたの指定したCSV

このスクリプトでは

$CSV = Import-Csv File.csv 
+1

サンプルコンテンツは、CSVの実際の生コンテンツ(テキストエディタで開いた場合)ですか? –

+0

私はそれをここに入力したが、あなたはcsvファイルにそれを置くとしたら、それは次のようになります。 コンピューター、 コンピューターA結果、 」KB00000が Cインストールされていません:2 C \ SomeTestFileバージョンである\ SomeTestFileバージョンは11.0" ですComputerB、%windir%\ somefile.exeはバージョン1.2です – user2542412

+1

あなたの質問を編集し、テキストをコピー/貼り付けてください。 –

答えて

0

## Q:\Test\2017\08\24\SO_45870618.ps1 
$FileIn = '.\FileIn.Csv' 
$FileOut = '.\FileOut.Csv' 

$Csv = Import-Csv $FileIn 
$Csv 

$CsvNew = ForEach ($Row in $Csv) { 
    If (!($Row.ComputerName)){ 
     If ($Last) {$Row.ComputerName = $Last} 
    } 
    $Last = $Row.ComputerName 
    ForEach ($line in ($Row.Results -Split('\r?\n'))){ 
     If ($line -NotMatch '^\s*KB\d+\s+is'){ 
      [PSCustomObject]@{ComputerName = $Last.Trim() 
           Results = $line} 
     } 
    } 
} 
"------------" 
$CsvNew 
$CsvNew | Export-Csv $FileOut -NoTypeInformation 

はこの出力を持つことになります:

FileOut.csv結果として得られる
> Q:\Test\2017\08\24\SO_45870618.ps1 

ComputerName Results 
------------ ------- 
computerA  KB00000 is not installed ... 
ComputerB %windir%\somefile.exe is Version 1.2 
------------ 
computerA c:\SomeTestFile Version is 2 
computerA c:\SomeTestFile Version is 11.0 
ComputerB %windir%\somefile.exe is Version 1.2 

> gc .\FileOut.Csv 
"ComputerName","Results" 
"computerA","c:\SomeTestFile Version is 2" 
"computerA","c:\SomeTestFile Version is 11.0" 
"ComputerB","%windir%\somefile.exe is Version 1.2" 
+0

残念ながら私は同じ出力を得ていませんでした。それは、ComputerAの結果のキャリッジリターンを削除しませんでした。 GCのC:\ tempに\ FileOut.csv "コンピュータ名"、 "結果" "コンピューターA" は、 "コンピューターB" KB00000が Cインストールされていません:\ SomeTestFileバージョンを2 Cれる\ SomeTestFileバージョンは11.0" です"、"%windir%\ somefile.exeはバージョン1.2です " – user2542412

+0

**は**私の'あなたのcsvのように見えます 'に気付いたのですか?実際のCSVを保存するために、あなたの質問を[編集](https://stackoverflow.com/posts/45870618/edit)してください。それをコメントに入れないでください。 – LotPings

+0

問題のCSVを更新し、メモ帳から直接投稿しました。ありがとうございました – user2542412

関連する問題