【问题标题】:How do I print the first line of a file after sorting without the last value in powershell?在powershell中没有最后一个值的情况下,如何在排序后打印文件的第一行?
【发布时间】:2021-12-05 04:30:17
【问题描述】:

我有一个类似这样的 .txt 文件:

First, Second, Third, Fourth, -32
First-a, Second-a, Third-a, Fourth-a, 98
First-b, Second-b, Third-b, Fourth-b, 32
First-c, Second-c, Third-c, Fourth-c, 1
First-d, Second-d, Third-d, Fourth-d, -20

我有以下排序代码:

    $Line = $_.Trim() -Split ','

    New-Object -TypeName PSCustomObject -Property @{
        fst = $Line[0]
        snd = $Line[1]
        thrd = $Line[2]
        frth = $Line[3]
        fifth = [int]$Line[4]
    }

} | Sort-Object -Descending fifth | Write-Host

所以这必须显示:

First-a, Second-a, Third-a, Fourth-a

因为 98 是最大的数字

【问题讨论】:

  • 顺便说一句:Write-Host is typically the wrong tool to use,除非意图是仅写入显示器,绕过成功输出流,并且能够将输出发送到其他命令,将其捕获在变量中,将其重定向到文件。要输出一个值,请单独使用它;例如,$value 而不是 Write-Host $value(或使用 Write-Output $value,尽管很少需要)。另见:stackoverflow.com/a/50416448/45375的底部
  • @mklement0,我认为Write-Host 在 5.0 中成为Write-Information 的包装器时有所赎回。 stackoverflow.com/a/38593312/447901
  • @lit, Write-Host 总是有其合法用途(由于您提到的 v5 更改,您甚至可以通过信息流捕获它),但我的评论旨在强调常见的反当真正的意图是将数据输出到成功流时使用Write-Host的模式。
  • @mklement0,我同意通常首选将数据保存在管道中以获得更好的自动化/集成功能。由于没有其他信息,我不认为这是该 OP 的问题。
  • @lit,我认为这是一个问题的原因是管道末端的| Write-Host。鉴于Write-Host 通常会产生从不太友好到完全无用的表示,因此它的使用毫无意义。 (如果意图是绕过成功流进行临时调试,您可以使用| Out-Host,这将为您提供友好的表示)。

标签: powershell


【解决方案1】:

由于您只是在寻找字符串输出,因此无需构造中间[pscustomobject] 表示:

Get-Content file.txt | 
  Sort-Object { [int] ($_ -split ', ')[-1] } -Descending |
    Select-Object -First 1 |
      ForEach-Object { $_ -replace ', [^,]+$' }

【讨论】:

    【解决方案2】:

    将其视为 CSV 文件并让 PowerShell CSV 函数完成更多工作似乎更容易。可以在Import-Csv 命令中指定字段名称。

    Import-Csv -Path .\sortcsv.txt -Header @('first','second','third','fourth','fifth') |
        Sort-Object {[int32]$_.fifth} |
        Select-Object -Last 1 |
        ForEach-Object {
            Write-Host "$($_.first), $($_.second), $($_.third), $($_.fourth)"
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多