web-dev-qa-db-ja.com

UNIXは指数値でソートしますか?

7つのデータフィールドを持つcsvファイルがあります。 7番目のフィールドを数値順に逆順にソートしたい(最小値を最初に)。データの7番目のフィールドは次のようになります。

0.498469643137
1
6.98112003175e-10
9.11278069581e-06

次のようなUNIXソートツールを使用しようとしました。

$ sort -t"," -n -k -r 7 <my_file>

私が抱えている問題は、ソートが指数形式を認識しないことです。たとえば、sortは6.98112003175e-101より大きいと見なします。 sortを使用してcsv列を並べ替えることができますが、科学的表記は認識できますか?助けてくれてありがとう。

42
drbunsen

「-g」オプションでソートすると、うまくいくはずです。 -gオプションは、ソートに「一般的な数値を使用する」ことを示します

69
Finslicer

ロケールが別の区切り文字を想定している可能性があることに注意してください。たとえば、ロシア語のローカリゼーションでは、「,」ではなく「.」文字が数字の一部を区切ります。この場合、LANG変数を考慮する必要があります。

私の場合、LANGはru_RU.KOI8-Rに設定されていたため、sort -gは間違った結果を返しました。

9
Pavel Kurochkin

だから-使い方がわからない人のための例を示すために、「-n」の代わりに「-g」を使用します。 l = 1,0.3,6.01e-10

sort -t$',' -n example.txt

0.3 1 6.01e-10

sort -t$',' -g example.txt

6.01e-10 0.3 1

3
amc
  1. -gを使用してください
  2. -nは使用しないでください

正しいコマンドはsort -g -k7,7 input.txtです

0
Shicheng Guo