基于多个条件使用Powershell从csv中删除多行
我需要从CSV的多行中删除。我看到了以下代码:基于多个条件使用Powershell从csv中删除多行,powershell,csv,Powershell,Csv,我需要从CSV的多行中删除。我看到了以下代码: Get-Content "file.csv" | Where {$_.Column -ne "Known Value" |Export new.csv 但我不知道如何让它为我的目的工作。我已将CSV作为系统对象数组导入。我将CSV中的所有单元格与哈希表进行比较,如@{“column”:“values”}。任何人都可以根据需要从CSV中删除的内容进行更改 以下是哈希表: #data_entry.ps1 #file name $remove_val
Get-Content "file.csv" | Where {$_.Column -ne "Known Value" |Export new.csv
但我不知道如何让它为我的目的工作。我已将CSV作为系统对象数组导入。我将CSV中的所有单元格与哈希表进行比较,如@{“column”:“values”}
。任何人都可以根据需要从CSV中删除的内容进行更改
以下是哈希表:
#data_entry.ps1 #file name
$remove_value_row = @{
"First_Name" = @("Benjamin","Ben");
"Last_Name" = @("Armour");
}
这是我的密码:
#drop_rows.ps1
. .\data_entry.ps1
$csv = import-csv "\droprows.csv"
$csv |Where-Object {
for($i=0;$i -lt $csv.length;$i++){
foreach($key in $remove_value_row.Keys){
-not($remove_value_row[$key] -contains $csv[$i].($key))
#drop where a csv column 1. matches a key ,
#2. the cell value is one of the key-values.
}
}
} | Export "out.csv"
您的代码每行枚举整个CSV,因此对于10k行,它将进行1亿次迭代 让我们从简化哈希表定义开始,因为字段名不包含空格:
$remove_value_row = @{
First_Name = "Benjamin", "Ben"
Last_Name = "Armour"
}
现在让我们正确地组织管道:导入-条件过滤器-导出
Import-Csv 'R:\input.csv' |
Where {
foreach ($remove in $remove_value_row.GetEnumerator()) {
if ($remove.value -contains $_.($remove.name)) {
return $false
}
}
return $true
} |
Export-Csv 'R:\output.csv' -NoTypeInformation -Encoding UTF8
嗯,我很好奇这个问题的答案是什么。在执行类似任务时,我在Powershell中实例化了一个C#文件读取器的实例,这样我就可以逐行读取,而不是使用
获取内容
。您好,您的代码已损坏,请修复它。至少有一个if
和几个括号。我对代码进行了格式化,以便您可以查看,但您的编辑超过了我的编辑。谢谢,我已添加了缺少的括号,并删除了多余的括号。@sodawillow我明白您的意思了。我修正了语法,使代码更清晰。