【问题标题】:PowerShell import and sort CSV filePowerShell 导入和排序 CSV 文件
【发布时间】:2018-03-17 07:14:21
【问题描述】:

我正在尝试导入 CSV 文件,然后按列排序。似乎无法正常工作。

$csvPath = 'path/to/usage_new.csv'
$usage = Get-Content -Path $csvPath | Select-Object -Skip 2 | Sort-Object "Percentage Used" | Out-String | ConvertFrom-Csv
foreach ($usage1 in $usage) {Write-Host Number $usage1.Phone used $usage1."Percentage Used"%}

这只是非常基本的,但是 Sort-Object 不起作用?

导入并打印到屏幕OK

任何建议都会很棒!

谢谢

【问题讨论】:

    标签: powershell csv sorting


    【解决方案1】:

    Get-Content 将文本行读入字符串,字符串没有称为“使用百分比”的属性,它们只有一个长度。

    您需要在进行排序之前从 CSV 进行转换,因此传入的数据具有从列标题构建的“使用百分比”属性:

    Import-Csv -Path $csvPath | 
        Select-Object -Skip 2 |
        Sort-Object -Property 'Percentage Used' |
        Select-Object Phone, @{Name='Used'; Expression={"{0}%" -f $_.'Percentage Used'}}
    

    【讨论】:

    • 谢谢!这有效,但前提是我取出“Select-Object -Skip 2”并从 CSV 文件中删除前两个“空白”行?
    • 有道理; Import-Csv 需要非常严格的输入格式,第一行成为标题,如果它是空白的,则没有要读取的标题...
    • 好的,谢谢。我现在不知道如何使用我的“foreach”语句输出文本 - 但除非你有一些建议,否则我可以玩弄它!
    • 好吧,我建议你不要 :p 这就是为什么我把最后一个 Select-Object 放进去,试图在一个整洁的 PowerShell 样式表中显示输出。除非它确实需要作为字符串,否则请去掉最后一行并将其替换为 ForEach-Object { 'Number {0} used {1}%' -f $_.Phone, $_.'Percentage Used' } - 除非您知道自己需要它,否则在 PS 中使用 Write-Host 进行一般输出不是一个好习惯。跨度>
    猜你喜欢
    • 2017-11-11
    • 1970-01-01
    • 2018-05-07
    • 2015-10-15
    • 1970-01-01
    • 2018-12-11
    • 2017-03-29
    • 2021-03-08
    • 1970-01-01
    相关资源
    最近更新 更多