PowerShell:读取文本,正则表达式排序,将输出写入文件和格式

时间:2010-05-26 23:22:41

标签: powershell sorting

我是Powershell新手,在阅读,排序和输出csv文件方面遇到了挑战。输入csv没有标题,数据如下:

05/25 / 2010,18:48:33,停止,a1usak,10.128.212.212
5月25日/ 2010,18:48:36,开始,q2uhal,10.136.198.231
5月25日/ 2010,18:48:09,停止,s0upxb,10.136.198.231

我使用以下管道构造来读取文件,排序并输出到文件:

(Get-Content d:\ vpnData \ u62gvpn2.csv)| %{,[regex] :: Split($ ,“,”)} | sort @ {Expression = {$ [3]}},@ {Expression = {$ _ [1]}} | out-file d:\ vpnData \ u62gvpn3.csv

新文件使用以下格式编写:

2010年5月25日
7点41分57秒
停止
a0uaar
10.128.196.160
2010年5月25日
12点24分24秒
启动
a0uaar
10.136.199.51
2010年5月25日
20时00分56秒
停止
a0uaar
10.136.199.51

我希望在输出文件中看到与原始输入文件类似的格式,使用逗号稀释器:

05/25 / 2010,07:41:57,停止,a0uaar,10.128.196.160
5月25日/ 2010,12:24:24开始,a0uaar,10.136.199.51
5月25日/ 2010,20:00:56,停止,a0uaar,10.136.199.51

但我似乎无法到达那里。我几乎认为我必须编写另一个段来读取新生成的文件并将其内容重置为首选格式以便进一步处理。

思想?

2 个答案:

答案 0 :(得分:2)

所以你想对第四列和第二列进行排序,然后写出一个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 :(得分:1)

您也可以以类似的方式使用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
"@