我是Powershell的新手,但这让我有点疯狂。我在这里看过各种各样的问题,但是找不到答案所以我走了。如果已经涵盖了这一点,请道歉。
我有两个包含数字列的文本文件。我想创建一个包含这2列的数组,并按列1或2进行排序。
如果我们有
$a=@(1,5,10,15,25)
$b=@(100,99,98,99,10)
我们创建
c$=$a,$b
我最初的想法是尝试这样的事情:
$c | sort { [int]$_[0] }
但它不起作用。我尝试了很多不同的东西,所以任何建议都会受到赞赏。
我正在编辑这个,因为我的问题不太清楚。最后,如果我按升序第2列排序$ c,我希望得到类似的结果:
25,10
10,98
5,99
15,99
1,100
知道如何实现这个目标吗?
答案 0 :(得分:3)
我不确定你是如何声明你的维度数组的,因为它就像你希望它被声明为像这样或类似的东西
$c = @(@(1,100),@(5,99),@(10,98),@(15,99),@(25,10))
如果它处于那种状态,那么排序是轻而易举的
$c | Sort-Object @{Expression={$_[1]}; Ascending=$True} | %{
"$($_[0]),$($_[1])"
}
Sort-Object
适用于一维数组。当涉及多个属性时,您需要指定要排序的属性以获得预期的输出。由于没有,我们使用计算表达式来基于第二个"列"。
示例输出
25,10
10,98
5,99
15,99
1,100
如果确实希望使用您的数组,我们需要一个中间步骤来转换您所拥有的数据,以及如何按照您期望的方式对其进行排序。
$a=@(1,5,10,15,25)
$b=@(100,99,98,99,10)
$c = @()
for($i = 0;$i -lt $a.Count; $i++){
$c += ,@($a[$i],$b[$i])
}
运行此代码后$c
将像我的排序一样工作。
答案 1 :(得分:1)
欢迎来到powershell世界。语法与经典编程语言略有不同,通常cmdlet从当前管道获取输入。在这种情况下,您谈到的命令是Sort-Object
,您可以直接将其用于具有数组内容的管道内容
$c = ($a | Sort-Object), ($b | Sort-Object)