Rud*_*y86 1 csv powershell text
我有一个关于我想要转换为带有标题的CSV文件的文本文件的问题.
原始文本文件如下所示:
StepStartTime: 2/1/2016 12:02:03 PM StepStopTime: 2/1/2016 12:02:06 PM StepNumber: 1 NextStepNumber: 2 --------------------------------------------------------------- StepStartTime: 2/1/2016 12:02:06 PM StepStopTime: 2/1/2016 12:02:07 PM StepNumber: 2 NextStepNumber: 3 --------------------------------------------------------------- StepStartTime: 2/1/2016 12:02:07 PM StepStopTime: 2/1/2016 12:02:08 PM StepNumber: 3 NextStepNumber: 4 ---------------------------------------------------------------
我想得到的是以下内容:
StepStartTime,StepStopTime,StepNumber,NextStepNumber 2/1/2016 12:02:03 PM,2/1/2016 12:02:06 PM,1,2 2/1/2016 12:02:06 PM,2/1/2016 12:02:07 PM,2,3 2/1/2016 12:02:07 PM,2/1/2016 12:02:08 PM,3,4
我试图让它在PowerShell中工作但到目前为止没有运气.我可以在基本级别阅读代码,但是自己组合不同的行为是向前迈进的一步.
将输入读入字符串并将其拆分为分隔线
(Get-Content 'C:\path\to\input.txt' -Raw) -split '-{63}'
Run Code Online (Sandbox Code Playgroud)
所以你得到这样的片段:
StepStartTime: 2/1/2016 12:02:07 PM StepStopTime: 2/1/2016 12:02:08 PM StepNumber: 3 NextStepNumber: 4
将冒号更改为=字符,因此您可以通过ConvertFrom-StringData以下方式将代码段转换为哈希表:
$snippet -replace ': ', '=' | ConvertFrom-StringData
Run Code Online (Sandbox Code Playgroud)
对于每个片段,这将为您提供类似的内容:
Name Value ---- ----- StepStopTime 2/1/2016 12:02:08 PM StepNumber 3 NextStepNumber 4 StepStartTime 2/1/2016 12:02:07 PM
从哈希表创建自定义对象:
New-Object -Type PSObject -Property $hashtable
Run Code Online (Sandbox Code Playgroud)
获取可以导出为CSV的格式:
StepStopTime StepNumber NextStepNumber StepStartTime ------------ ---------- -------------- ------------- 2/1/2016 12:02:08 PM 3 4 2/1/2016 12:02:07 PM
完整代码:
(Get-Content 'C:\path\to\input.txt' -Raw) -split '-{63}' | Where-Object {
$_.Trim()
} | ForEach-Object {
$props = $_.Trim() -replace ': ', '=' | ConvertFrom-StringData
New-Object -Type PSObject -Property $props
} | Export-Csv 'C:\path\to\output.csv' -NoType
Run Code Online (Sandbox Code Playgroud)
注意:如果您仍在使用PowerShell v2,则需要更换
Get-Content 'C:\path\to\input.txt' -Raw
Run Code Online (Sandbox Code Playgroud)
喜欢的东西
Get-Content 'C:\path\to\input.txt' | Out-String
Run Code Online (Sandbox Code Playgroud)
将文件的内容作为单个字符串.-Raw在PowerShell v3之前,该参数不可用.
| 归档时间: |
|
| 查看次数: |
584 次 |
| 最近记录: |