使用Powershell对文本文件进行排序并组合相似的术语?

时间:2015-02-14 06:22:03

标签: sorting powershell

在这个假设的世界中,让我们说有一所学校提供A到Z课程。为了毕业,你只需要在如此多的某些课程中获得这么多时间。这是以这种方式记录的(数字=小时,字母=类):

Sunday 01/10/15 - 2A, 5H, 3Z 
Monday 01/11/15 - 2A, 5Z, 5B
Wednesday 01/15/15 - 2A, 4Y, 6R

在学生的个人记录结束时,它会将所有具有匹配字母的数字组合在一起,从而显示每个班级的小时总数。

Sunday 01/15 - 2A, 5H, 3Z 
Monday 02/15 - 2A, 5Z, 5B
Wednesday 01/15/15 - 2A, 4Y, 6R

6A, 5B, 5H, 6R, 4Y, 8Z.

虽然我很乐意导入数据和排序数据,但我很难弄清楚如何编写脚本以添加共享相同字母的所有数字。如果这些数据长达数百行,并且在这些行中有三个2B实例,我希望能够选择那些并向我显示6B。我错过了什么?我使用错误的工具来完成工作吗?

1 个答案:

答案 0 :(得分:1)

你想要的是一本总和字典。在Powershell中,这将是一个总和的哈希表。每次看到一封信,都要在顶级哈希表中查找,看看它是否在那里。如果没有为该字母创建总和并将其添加到哈希表中。

完成后,您可以将密钥带到哈希表并对其进行排序,然后将所有字母,和对打印出来作为键值对。

我会为此写一些代码,但我需要先喝咖啡:)。

这就是......

$slst = ("2A","5H","3Z","2A","5Z","5B","2A","4Y","6R")

$sums = @{}

foreach($s in $slst)
{
  $skey = $s[1]
  $sval = $s[0] - 48
  $sums[$skey] += $sval
}

$sums.GetEnumerator() | Sort-Object Name

注意之前有一个更长的版本,但有人指出你不需要在powershell中初始化词典表达。