PowerShell: удаление строки в соответствии с длиной значения в определенном столбце - PullRequest
0 голосов
/ 07 мая 2018

У меня есть 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 голосов
/ 07 мая 2018


На самом деле вы нашли правильный путь, и проблема в том, что вы пропустили один параметр.

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

В одном я не уверен: вы можете получить повторные заголовки, если это так, попробуйте Get-Content и Add-Content.
Попробуйте, и дайте нам знать, если это работает. :)

0 голосов
/ 07 мая 2018

Чтобы получить чистую длину, я предлагаю вставить .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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...