如何将文本转换为带有分隔符“|”的csv文件在 powershell 中

how to convert text to csv file which having delimiter '|' in powershell

代码:

$file= Get-Content "C:\Users\phm4\Desktop\source\status.txt" | select -first 18

$new=$file | select -Skip 12
$nospace=($new)-replace '\s' 
$nospace | Out-File new1.txt

import-csv new1.txt -Delimiter "|" | export-csv csvfile.csv

示例数据:

1|10.9.7.73|-A--|0|505k|505k|2.4T/52.7T(5%)|L3:1.5T
2|10.9.7.74|OK|0|608k|608k|2.4T/52.7T(5%)|L3:1.5T
3|10.9.7.75|OK|0|626k|626k|2.4T/52.7T(5%)|L3:1.5T
4|10.9.7.76|OK|0|0|0|2.4T/52.7T(5%)|L3:1.5T
5|10.9.7.77|OK|0|0|0|2.4T/52.7T(5%)|L3:1.5T
6|10.9.7.78|OK|0|398k|398k|2.4T/52.7T(5%)|L3:1.5T

使用import-csv导入文本文件,然后使用[=13]导出 =]export-csv


$path = "C:\Users\phm4\Desktop\source\status.txt"
$csv = "C:\Users\phm4\Desktop\source\csvfile.csv"
$import = import-csv $path -Delimiter "|" 
$import | export-csv $csv

你不能直接在文本文件上使用 Import-Csv 的原因是因为正确的 CSV 文件有 headers 必须是 unique 和示例你显示没有 headers.
这意味着 PowerShell 将使用顶行作为 header,但不能,因为那样有两列名为“505k”..

您可以做的是:

# get the lines you're interested in and repace whitespaces
$data = Get-Content -Path 'D:\Test\test.txt' -TotalCount 18 | Select-Object -Skip 12 | ForEach-Object { $_ -replace '\s' }

# first find out how many headers you need and create them (as demo, they will be called 'Column_1' etc.)
$n = (($data | ForEach-Object { ($_ -split '\|').Count }) | Measure-Object -Maximum).Maximum
$headers = 1..$n | ForEach-Object { "Column_$_" }

对我来说,如果你想要生成的 csv 文件以管道符号 | 作为分隔符,我不是很清楚,但如果是这样,只需将数据写回文件,包括那些 headers:

# join the created $headers array with the pipe symbol and write to file
($headers -join '|') | Set-Content -Path 'D:\Test\csvfile.csv'
$data | Add-Content -Path 'D:\Test\csvfile.csv'

但是如果您不想要管道,而是想要一个不同的字符作为分隔符,请使用:

# for demo output a csv with the default comma as delimiter
$data | ConvertFrom-Csv -Header $headers -Delimiter '|' | Export-Csv -Path 'D:\Test\csvfile2.csv' -NoTypeInformation