【问题标题】:How to convert text file to csv in powershell?如何在powershell中将文本文件转换为csv?
【发布时间】:2017-05-11 23:22:50
【问题描述】:

我有一个文本文件。每行记录一个事件,字段由“|”分隔。 是否可以使用“get-content event.log | export-csv event.csv”之类的 cmdlet 将文本文件转换为 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|

【问题讨论】:

    标签: powershell csv


    【解决方案1】:

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

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

    所以在你的情况下,它可以很简单

    Import-Csv .\event.log -Delimiter "|" | Export-Csv .\event.csv -NoTypeInformation
    

    【讨论】:

    • 补充一点,如果您的文本文件中没有标题,您可以使用-Header 参数添加它们,即$file = Import-Csv .\event.log -Delimiter '|' -Header "Name","StartTime","EndTime"
    【解决方案2】:

    如果文件不是太大(几兆字节以下),您可以直接使用String.Replace 操作:

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

    或者更简洁:

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

    这对于大文件(超过几兆字节)不太适用,因为整个文件作为System.String 实例加载到内存中,然后Replace 操作将创建一个新实例(因此加倍内存要求)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-15
      • 2022-01-23
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 2022-01-11
      • 2019-04-28
      相关资源
      最近更新 更多