Reputation: 3
So I have a string that is treated as a list when I split them in the \n and it looks like this:
{aaaa2,bbbb2,cccccc,ddddd\n aaaa3,bbbb4,cccccc,ddddd\n aaaa4,bbbb1,cccccc,ddddd\n aaaa5,bbbb3,cccccc,ddddd}
I need to reorder this list based on B column, in a way that the lesser value comes first and equal values stay together. Meaning it should be something like this:
{aaaa4,bbbb1,cccccc,ddddd\n aaaa2,bbbb2,cccccc,ddddd\n aaaa5,bbbb3,cccccc,ddddd\n aaaa3,bbbb4,cccccc,ddddd}
How can I do it?
Upvotes: 0
Views: 199
Reputation: 52344
If you split each element of your list into a list itself, you can use lsort
's -index
option:
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]
will output
aaaa4,bbbb1,cccccc,ddddd
aaaa2,bbbb2,cccccc,ddddd
aaaa5,bbbb3,cccccc,ddddd
aaaa3,bbbb4,cccccc,ddddd
Upvotes: 3