如何通过 TCL 中的子元素之一对列表进行排序

How can I order a list by one of its sub elements in TCL

所以当我在 \n 中拆分它们时,我有一个字符串被视为列表,它看起来像这样:
{aaaa2,bbbb2,cccccc,ddddd\n aaaa3,bbbb4,cccccc,ddddd\n aaaa4,bbbb1,cccccc,ddddd\n aaaa5,bbbb3,cccccc,ddddd}

我需要根据 B 列重新排序此列表,以较小的值在前且相等的值保持在一起的方式。意思应该是这样的:
{aaaa4,bbbb1,cccccc,ddddd\n aaaa2,bbbb2,cccccc,ddddd\n aaaa5,bbbb3,cccccc,ddddd\n aaaa3,bbbb4,cccccc,ddddd}

我该怎么做?

如果将列表中的每个元素拆分为一个列表本身,则可以使用 lsort's -index 选项:

set lst {aaaa2,bbbb2,cccccc,ddddd
    aaaa3,bbbb4,cccccc,ddddd
    aaaa4,bbbb1,cccccc,ddddd
    aaaa5,bbbb3,cccccc,ddddd}
set lst [lmap item $lst { split $item , }]
set lst [lsort -index 1 $lst]
puts [join [lmap sublist $lst { join $sublist , }] \n]

会输出

aaaa4,bbbb1,cccccc,ddddd
aaaa2,bbbb2,cccccc,ddddd
aaaa5,bbbb3,cccccc,ddddd
aaaa3,bbbb4,cccccc,ddddd