2016-09-15 88 views
2

我有一個包含多行和兩列的CSV:「名稱」和「信息」。從CSV中刪除單個行

我循環通過CSV和檢查每行一個條件,如果條件滿足,我想刪除行:

for ($i=0; $i -le $CSV.length; $i++) 
{    
    if ($CSV.name == "Fred") 
    { 
     #remove $CSV[$i] -- that one line; both "Name" and "Information" 
    } 
} 

我已經看到了使用的解決方案Get-ContentImport-Csv和臨時文件,但我還沒有將自己的頭部纏繞在身上,並且認爲必須有一個更簡單的方法。

無論如何,任何幫助表示讚賞!

回答

4

我會使用Import-CSV cmdlet讀取CSV並使用Where-Object cmdlet過濾條目。最後,寫回CSV使用Export-CSV的cmdlet:

$csv = import-csv 'YourPath.csv' 
$csv | Where Name -ne 'Fred' | Export-Csv 'YourPath.csv' -NoTypeInformation 
+1

好辦法,但恐怕這個答案的風險覆蓋文件'YourPath.csv'之前完全讀取。它應該保存到一個新文件中,或者在寫入之前讀入一個變量。 –

+0

@Burt_Harris你是對的。我會採用我的腳本。 –

+3

用temp變量放鬆一些優雅。另一種方法是將import-csv放在parens中,例如:'(import-csv。\ test.csv)| where Name -ne'Fred'| export-csv test.csv -NoTypeInformation' –