如何在PowerShell中将文本文件转换为csv?

时间:2017-05-11 23:22:50

标签: powershell csv

我有一个文本文件。每行记录一个事件,字段由' |'分隔。 是否可以使用像#34; get-content event.log |这样的cmdlet export-csv event.csv"将文本文件转换为csv文件?

xxx(1365)|2016-09-29 06:00:00.0|2016-09-29 06:30:00.0|
bbb(110)|2016-09-29 06:30:00.0|2016-09-29 07:00:00.0|
ccc(5243)|2016-09-29 07:00:00.0|2016-09-29 07:30:00.0|
ddd(1950)|2016-09-29 07:30:00.0|2016-09-29 08:00:00.0|
eee(10)|2016-09-29 08:00:00.0|2016-09-29 09:00:00.0|
fff(464)|2016-09-29 09:00:00.0|2016-09-29 10:00:00.0|
dddd(874)|2016-09-29 10:00:00.0|2016-09-29 11:00:00.0|
ggggg(6)|2016-09-29 11:00:00.0|2016-09-29 12:00:00.0|
kkkk(272)|2016-09-29 12:00:00.0|2016-09-29 12:30:00.0|

2 个答案:

答案 0 :(得分:3)

Import-Csv cmdlet允许您指定分隔符

$file = Import-Csv .\event.log -Delimiter '|'

所以在你的情况下,它可以像

一样简单
Import-Csv .\event.log -Delimiter "|" | Export-Csv .\event.csv -NoTypeInformation

答案 1 :(得分:0)

如果文件不是太大(几兆字节以下),您可以通过直接的String.Replace操作来完成:

$content = ( $fileName | Get-Content )
$content = $content -replace '|' ','
$content | Out-File $fileName

或者更简洁:

( $fileName | Get-Content ) -replace '|' ',' | Out-File $fileName

对于大文件(超过几兆字节),这不会很好,因为整个文件作为System.String实例加载到内存中,然后Replace操作将创建一个新实例(从而使内存需求翻倍)。

更快的版本可能会逐行读取输入文件,并为每一行执行-replace操作 - 甚至逐个字符。