2016-09-15 70 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' –