PowerShell: чтение текста, регулярное выражение, запись выходных данных в файл и форматирование - PullRequest
1 голос
/ 27 мая 2010

Я новичок в Powershell и столкнулся с проблемой чтения, сортировки и вывода файла csv. Входной CSV не имеет заголовков, данные выглядят следующим образом:

* * 1002 05/25 / 2010,18: 48: 33, остановка, a1usak, 10.128.212.212
05/25 / 2010,18: 48: 36, старт, q2uhal, 10.136.198.231
05/25 / 2010,18: 48: 09, остановка, s0upxb, 10.136.198.231

Я использую следующую конструкцию трубопровода для чтения файла, сортировки и вывода в файл:

(Get-Content d: \ vpnData \ u62gvpn2.csv) | % {, [regex] :: Split ($ , ",")} | sort @ {Expression = {$ [3]}}, @ {Expression = {$ _ [1]}} | вне файла d: \ vpnData \ u62gvpn3.csv

Новый файл записан в следующем формате:

05/25/2010
07: 41: 57
Стоп
a0uaar
10.128.196.160
05/25/2010
12: 24: 24
Начало
a0uaar
10.136.199.51
05/25/2010
20: 00: 56
Стоп
a0uaar
10.136.199.51

В выходном файле я хотел бы видеть формат, аналогичный исходному входному файлу с разделителями-запятыми:

* * 05 +1034 / 25 / 2010,07: 41: 57, остановка, a0uaar, 10.128.196.160 * * одна тысяча тридцать пять 05/25 / 2010,12: 24: 24, старт, a0uaar, 10.136.199.51
05/25 / 2010,20: 00: 56, остановка, a0uaar, 10.136.199.51

Но, похоже, я не могу туда добраться. Я почти думаю, что мне придется написать еще один сегмент, чтобы прочитать вновь созданный файл и восстановить его содержимое в предпочтительном формате для дальнейшей обработки.

Мысли

Ответы [ 2 ]

2 голосов
/ 27 мая 2010

То есть вы хотите отсортировать по четвертому и второму столбцам, а затем записать CSV-файл?

Вы можете использовать import-csv для загрузки файла в память, указав имена столбцов с аргументом -header. Однако команда export-csv запишет строку заголовка в файл назначения и обернет значения в двойные кавычки, которые вам, вероятно, не нужны.

Это работает, хотя:

import-csv -header d,t,s,n,a test.csv |
    sort n,t | 
    %{write-output ($_.d + "," + $_.t + "," + $_.s + "," + $_.n + "," + $_.a) }

(для удобства чтения я обернул его в несколько строк.)

Если вы перенаправите вывод этого обратно в файл, он должен делать то, что вы хотите.

1 голос
/ 27 мая 2010

Вы также можете использовать ConvertFrom-CSV аналогичным образом

ConvertFrom-Csv -Header date, time, status,user,ip  @"
05/25/2010,18:48:33,Stop,a1usak,10.128.212.212
05/25/2010,18:48:36,Start,q2uhal,10.136.198.231
05/25/2010,18:48:09,Stop,s0upxb,10.136.198.231
"@
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...