2014-10-17 6 views
0

Я хотел бы использовать powershell для удаления лишних пробелов и замены их одной запятой между элементами, чтобы я мог преобразовать результат в рабочий csv для дальнейшего анализа.удаление лишних пробелов в powershell

вот мой код;

Get-Content –path C:\Users\USERNAME\Desktop\results.txt| ForEach-Object {$_ -replace "\s+" " " } | Out-File -filepath C:\Users\USERNAME\Desktop\results.csv 

в текстовом файле начальные resuts подобны этому

entry  entry  entry (all separated with 5 spaces) 

Что я бледный, чтобы она выглядела, как это

вход, вход, вход

так первенствует поместит их в отдельных ячейках

Спасибо за ваше время

ответ

2

Вы были близки, но вам нужно было заменить "," вместо " ". Предположим, что строки ваших текстовых файлов похожи на следующие. Я не знаю, если бы вы имели в виду ведущее/конечное пространство, чтобы быть там, но это нормально.

" entry entry entry "

Get-Content –path C:\Users\USERNAME\Desktop\results.txt| ForEach-Object {$_.Trim() -replace "\s+" "," } | Out-File -filepath C:\Users\USERNAME\Desktop\results.csv -Encoding ascii 

$_.Trim() -replace "\s+" "," использовать обрезки, чтобы удалить внешние пространства для предотвращения дополнительных значений в CSV на всякий случай.

Сообщите мне, если я неправильно передал ваш вопрос.

+1

Просто слово предупреждения в Out-File. Кодировка по умолчанию - Unicode. '((Get-Content 'entry.txt') -replace ('\ s {2,5}', ',')). Trim() | Out-File -Encoding ascii out.csv' – evilSnobu

+0

Если вы хотите кодировку ASCII, вы можете торговать Out-File для Set-Content, который использует кодировку по умолчанию ASCII. – mjolinor

+0

@kamikatze Полезно знать о кодировке. В этом случае я просто следил за тем, что OP имело до вывода. – Matt

1

Вы можете использовать trim, которые удаляют символы (по умолчанию, пробелы) с начала или конца строки. Посмотрите here.

Это можно сделать иначе, если вы хотите сделать это с помощью символа замены с регулярным выражением. Также посмотрите here.