如何使用脚本处理CSV文件第一列中的文本



有一个包含多个包含信息的列的 CSV 文件。需要移除Employee Name中的打开和关闭"以及如下所示的,

Employee Name,Employee #,column3, column4 etc. <br>
"Lastname, Firstname",123,abc,xyz<br>
"Lastname, Firstname",123,abc,xyz<br>

结果:

Employee Name,Employee #,column3, column4 etc.<br>
Lastname Firstname,123,abc,xyz<br>
Lastname Firstname,123,abc,xyz<br>

已尝试使用以下Powershell脚本:

(gc C:pathtocsv.csv) | % {$_ -replace '"', ""} | out-file C:pathtocsv.csv -Fo -En ascii

这只会删除Lastname , Firstname周围的" ",但在文本编辑器中打开 csv 文件时,逗号仍然存在。需要此格式将数据发送到另一家公司。我尝试过的所有内容都会删除每个逗号。Powershell和其他语言的新手,我相信这是一个简单的解决方案。请帮忙!

Powershell对CSV文件有很多内置处理,而不是尝试将is视为文本文件,您可以使用以下内容来删除所需的逗号:

Import-Csv .a.csv | % {
    $_."Employee Name" = ($_."Employee Name" -replace ',','')
    $_ #return modified rows
} | Export-Csv .b.csv -notype -delim ','

默认情况下,这将导出带有双引号的所有内容,因此您可能需要返回并运行类似以下内容:

(gc .b.csv -raw) -replace '"','' | Out-File .c.csv

以同时删除所有双引号。

警告:如果文本包含特殊字符(即逗号、引号(,引号很重要

如果你真的想去条线,你可以把你的csv作为常规文本文件处理:

#sample data
@'
"Lastname, Firstname",123,abc,xyz
"Lastname, Firstname",123,abc,xyz
'@ | out-file c:temptest.csv
Get-Content c:temptest.csv | % {
    $match = [Regex]::Match($_,'"([^,]*), ([^"]*)"(.*)')
    if ($match.Success) {
        $match.Groups[1].Value+' '+$match.Groups[2].Value+$match.Groups[3].Value
    } else {
        $_ #skip processing if line format do not match pattern
    }
}

最新更新