【问题标题】:Powershell sorting multiple columns and directionsPowershell对多个列和方向进行排序
【发布时间】:2018-11-16 12:06:58
【问题描述】:

我已经设法让 Powershell 对多列和不同方向进行排序;

$prop1 = @{Expression='Priority'; Descending=$true }

$prop2 = @{Expression='Date'; Ascending=$true }

(Import-Csv $BackUpDataPath"WaitList.csv") |
    Sort-Object $prop1, $prop2 |
    Export-Csv $BackUpDataPath"WaitList.csv" -NoType

我的问题是优先级值存储为字符串数据并按文本排序,因此文件的输出是;

Date              Priority

6/28/2016 16:46  2

6/28/2016 16:59  2

6/29/2016 15:27  11

6/28/2016 16:42  1

6/28/2016 16:49  1

我尝试过[int]$prop1 和类似的方法将其更改为整数,但似乎不起作用。 6/29/2016 15:27 11 应该是第一个,但不是。只要 # 小于 10 就可以了。

【问题讨论】:

    标签: sorting csv powershell


    【解决方案1】:

    试试看

    $prop1 = @{Expression={[int]$_.Priority}; Descending=$true }
    

    【讨论】:

    • 在我将整个部分放入 () 的 ($prop1 = @{Expression={[int]$_.Priority}; Descending=$true }) 之后,这很有效,我尝试过类似的配置。只是还没到这个。谢谢。
    • 很高兴听到,但没有必要在它周围加上括号。
    • 我让你使用 () 的。没有它们,我收到一条错误消息“找不到接受参数'='的位置参数”。
    • 我才意识到为什么它没有麦芽汁。我在第 3 行实现了您的更改,而不是 $prop1 的初始声明。再次感谢。
    • 啊,好吧,所以您尝试将其直接传递给 Sort-Object cmdlet - 是的,在这种情况下,您必须将其包裹在括号中,以便将其作为子表达式进行评估。
    【解决方案2】:

    查看如何从 string->int 转换我发现 [int] 不可靠,所以我寻求了另一种解决方案。请尝试以下方法:

    "2;2;11;1" -split ";" | %{[int]$Numeric=[convert]::ToInt32($_.toString(), 10) ; add-member -NotePropertyName "Numeric" -NotePropertyValue $Numeric -InputObject $_ ; echo $_} | Sort-Object Numeric
    

    我创建一个字符串数组,然后拆分它,对于每个对象,我生成值的 Int32 版本,然后向输入对象添加一个新成员,我打印这个新对象,最后只是按新的对数组进行排序属性。

    我尝试在哈希表中包含用于排序对象的“属性”参数的脚本,但这不起作用:(。

    希望这可以解决您的问题。

    问候。

    【讨论】:

    • 感谢您的回复。 DAXaholics 解决方案非常适合我。
    猜你喜欢
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多