通过子字符串的数量对字符串进行排序?

6 text-processing sort

我有一长串这样的数字:

1234-212-22-11153782-0114232192380
8807698823332-6756-234-14-09867378
45323-14-221-238372635363-43676256
62736373-9983-23-234-8863345637388

. . . . 
. . . . 
Run Code Online (Sandbox Code Playgroud)

我想做两件事:

1)按每个段内的位数对这个列表进行排序,输出应该是这样的:

22-212-1234-11153782-0114232192380
14-234-6756-09867378-8807698823332
14-221-45323-43676256-238372635363
23-234-9983-62736373-8863345637388
Run Code Online (Sandbox Code Playgroud)

2) 求每行子串的个数,输出应为:

2-3-4-8-13
2-3-4-8-13
2-3-5-8-12
2-3-4-8-13
Run Code Online (Sandbox Code Playgroud)

在此示例中,每个数字的第一、第二和第三段具有相同的数字,但它们可能不同。

ste*_*ver 7

怎么样

$ perl -F'-' -lpe '$_ = join "-", sort { length $a <=> length $b } @F' file
22-212-1234-11153782-0114232192380
14-234-6756-09867378-8807698823332
14-221-45323-43676256-238372635363
23-234-9983-62736373-8863345637388
Run Code Online (Sandbox Code Playgroud)

$ perl -F'-' -lpe '$_ = join "-", sort { $a <=> $b } map length, @F' file
2-3-4-8-13
2-3-4-8-13
2-3-5-8-12
2-3-4-8-13
Run Code Online (Sandbox Code Playgroud)

感谢Stéphane Chazelas提出的改进建议