我有一个文本文件。每行记录一个事件,字段由' |'分隔。 是否可以使用像#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|
答案 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
操作 - 甚至逐个字符。