PowerShell:根据特定列中值的长度删除行

时间:2018-05-07 08:41:35

标签: powershell

我有一个csv文件,其中有多行。我只想让NumInventaire(其中一列)的字符长度严格等于6的行。

以下是数据行的示例:

Avis,NumInventaire,OS,Statut,Client
123456,LM-001,78954,In Progress,M. Dupont
89541,PLATEAU 58 RELEASE,892156,To do,M. Durand
99962,BU-564,223621,Done,M. Martin
96654,ZONE GRILLAGE,75546,Done,M. Michel
56456,P45 RELEASE,75445,To Do, M. Marsan
74654,JH-654,78545,In Progress, M. Blanc

我现在有这行代码:

Import-Csv "$treatmentfolder\data.csv" | where {$_.NumInventaire.length -eq 6} | Export-Csv -Path "$treatmentfolder\new.csv" -notypeinfo

它适用于那里的数据,但我的数据文件有1000行和28列。只保留一行。我如何获得所有行?

2 个答案:

答案 0 :(得分:0)

要获得净长度,我建议在您的命令中插入.Trim("'")和/或.Trim('"')

Import-Csv "$treatmentfolder\data.csv" | 
  where {$_.NumInventaire.Trim('"').Trim("'").length -eq 6} | 
    Export-Csv -Path "$treatmentfolder\new.csv" -notypeinfo

您还可以反击检查将文件视为文本:

gc "$treatmentfolder\data.csv" | where {$_.Split(',')[1].Trim('"').Trim("'").Length -eq 6}

答案 1 :(得分:0)


确实你找到了正确的方法,问题是你错过了一个参数。

Import-Csv "$treatmentfolder\data.csv" |`
where {$_.NumInventaire.length -eq 6} |`
Export-Csv -Path "$treatmentfolder\new.csv" -notypeinfo -Append

有一点我不确定:您可能会重复标题,如果是,请尝试Get-ContentAdd-Content
试一试,让我们知道它是否有效。 :)