例: File.txtのコンテンツ:
100 foo
2 bar
300 tuu
「sort -k 1,1 File.txt」を使用すると、行の順序は変更されませんが、次のようになります。
2 bar
100 foo
300 tuu
絶対数値値に基づいて数値で構成されるフィールドをソートするにはどうすればよいですか?
sortのmanページ ...を覗いてください.
-n, --numeric-sort compare according to string numerical value
ここに例があります...
sort -n filename
ローリングログのファイル名など、テキストと数字が混在する文字列を並べ替えている場合、sort -n
を使用した並べ替えは期待どおりに機能しません。
$ ls |sort -n
output.log.1
output.log.10
output.log.11
output.log.12
output.log.13
output.log.14
output.log.15
output.log.16
output.log.17
output.log.18
output.log.19
output.log.2
output.log.20
output.log.3
output.log.4
output.log.5
output.log.6
output.log.7
output.log.8
output.log.9
その場合、オプション-V
はトリックを実行します。
$ ls |sort -V
output.log.1
output.log.2
output.log.3
output.log.4
output.log.5
output.log.6
output.log.7
output.log.8
output.log.9
output.log.10
output.log.11
output.log.12
output.log.13
output.log.14
output.log.15
output.log.16
output.log.17
output.log.18
output.log.19
output.log.20
manページから:
-V, --version-sort natural sort of (version) numbers within text
さて、ここでの他のほとんどの答えは
sort -n
ただし、これが負の数で機能するかどうかはわかりません。 Fedora 9のsortバージョン6.10で得られた結果を以下に示します。
入力ファイル:
-0.907928466796875
-0.61614990234375
1.135406494140625
0.48614501953125
-0.4140167236328125
出力:
-0.4140167236328125
0.48614501953125
-0.61614990234375
-0.907928466796875
1.135406494140625
これは明らかに数値で順序付けされていません。
次に、すべての値が正の場合にのみ、sort -n
を使用することがより正確な答えになると思います。
追伸:sort -g
を使用すると、この例では同じ結果が返されます
編集:
ロケール設定はマイナス記号が順序にどのように影響するかに影響するようです( こちらを参照 )。適切な結果を得るために、私はちょうどやった:
LC_ALL=C sort -n filename.txt
数値の並べ替えオプションを使用する必要があります。
sort -n -k 1,1 File.txt
sort -n
またはsort --numeric-sort
を使用します。
次のコマンドを実行する必要があります。
sort -n -k1 filename
それはそれを行う必要があります:)