Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于多个条件使用Powershell从csv中删除多行_Powershell_Csv - Fatal编程技术网

基于多个条件使用Powershell从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

我需要从CSV的多行中删除。我看到了以下代码:

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我明白您的意思了。我修正了语法,使代码更清晰。