テキストと数字の混合入力がある場合(前に0がつかない)、「自然な」順序で並べ替えるにはどうすればよいですか?たとえば、次の入力(ホスト名)が与えられた場合:
whatever-1.example.org
whatever-10.example.org
whatever-11.example.org
whatever-12.example.org
whatever-13.example.org
whatever-2.example.org
whatever-3.example.org
whatever-4.example.org
whatever-5.example.org
whatever-6.example.org
whatever-7.example.org
whatever-8.example.org
whatever-9.example.org
私は次のような出力が欲しい。
whatever-1.example.org
whatever-2.example.org
whatever-3.example.org
whatever-4.example.org
whatever-5.example.org
whatever-6.example.org
whatever-7.example.org
whatever-8.example.org
whatever-9.example.org
whatever-10.example.org
whatever-11.example.org
whatever-12.example.org
whatever-13.example.org
編集する
「何でも」に加えて
thingaroo-#.example.org
.
:
blargh-#.example.org
.
:
...etc...
ありがとうございます!
答え1
GNU coreutils ≥ 7.0 の場合、バージョン順序付けを使用できます。一連の数字が 10 進整数値でソートされる点を除いて、これは辞書式の順序です。
sort -V
答え2
特定のタイプの入力を正常に並べ替えることができます。
sort -t - -nk2,2
ただし、必要に応じて、すべての種類のファイル名に実際に一般化されるわけではありません。
答え3
申し訳ありません。元の質問に必要なすべての情報を提供していませんでした。すべての答えは私が本当に欲しいものを見つけるのを助けました。私が使用したものは次のとおりです。
sort -t- -k1,1 -k2,2
どこ:
-t- divide the hostnames into fields using dash (-) rather than spaces
-k1,1 the first sort key is the first field (from 1 to 1), a normal sort
-k2,2 the second key is the second field using a numeric (n) sort
(the field includes the ".example.org" but the numeric sort
seems to cope find with the trailing non-number chars)
結果は次のとおりです。
blargh-1.example.org
:
blargh-13.example.org
thingaroo-1.example.org
:
thingaroo-17.example.org
whatever-1.example.org
:
whatever-13.example.org
答え4
sort -t- -k2n file
whatever-1.example.org
whatever-2.example.org
whatever-3.example.org
whatever-4.example.org
whatever-5.example.org
whatever-6.example.org
whatever-7.example.org
whatever-8.example.org
whatever-9.example.org
whatever-10.example.org
whatever-11.example.org
whatever-12.example.org
whatever-13.example.org