部分文字列の数に基づいて文字列を並べ替えますか?

部分文字列の数に基づいて文字列を並べ替えますか?

次のような長い数字のリストがあります。

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

. . . . 
. . . . 

私は2つのことをしたい:

1)各セグメント内のビット数に基づいてリストを並べ替えると、出力は次のようになります。

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

2)各行の部分文字列の数を見つけると、出力は次のようになります。

2-3-4-8-13
2-3-4-8-13
2-3-5-8-12
2-3-4-8-13

この例では、各番号の第1、第2、第3のセグメントは同じ番号を有するが異なる場合がある。

ベストアンサー1

どうですか?

$ 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

そして

$ 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

ありがとうスティーブン・チャジェラス提案された改善点

おすすめ記事