更改文字格式

时间:2018-10-17 09:47:16

标签: powershell text formatting

目前,我有以下内容:

GUID=1234
PatGUID=4567
...

但是我需要这种格式,因为我有大量数据:

GUID;PatGUID
1234;4567
...

我有很多类似的文件可以更改格式。我目前正在尝试使用PowerShell更改格式,但是,我接受实现目标的任何方法。

1 个答案:

答案 0 :(得分:1)

将文件的内容转换为哈希表,从该哈希表创建自定义对象,然后使用自定义分隔符导出为CSV。

$ht = Get-Content 'input.txt' |
      Out-String |
      ConvertFrom-StringData

New-Object -Type PSObject -Property $ht |
    Export-Csv 'output.csv' -Delimiter ';' -NoType

在PowerShell v3及更高版本上,您可以通过用Get-Content | Out-String替换Get-Content -Raw并使用[PSCustomObject]类型的加速器而不是New-Object来简化代码。

$ht = Get-Content 'input.txt' -Raw | ConvertFrom-StringData

[PSCustomObject]$ht |
    Export-Csv 'output.csv' -Delimiter ';' -NoType

如果输入数据多次包含相同的键,则需要将数据拆分为多个块并将每个块分别转换为一个对象:

$list = (Get-Content 'input.txt' | Out-String) -split '\r?\n(?=GUID)' |
        ForEach-Object {
            $ht = $_ | ConvertFrom-StringData
            New-Object -Type PSObject -Property $ht
        }

$list | Export-Csv 'output.csv' -Delimiter ';' -NoType

\r?\n(?=GUID)是一个正则表达式,它使用正向超前断言((?=...))来将字符串拆分为换行符,并在其后跟随字符串“ GUID”。