web-dev-qa-db-ja.com

「sort -g」が科学表記法のデータで期待どおりに機能しない

データファイルを降順で並べ替えようとしています。データファイルは、タブで区切られた3つの列で提供されます。私はそれらを3番目の列の降順で並べ替えたいと思います(3番目の列は指数値の科学表記として与えられています):

cat eII_surf.txt | sort -gr -k3

どういうわけか、これは以前のマシンで機能しましたが、私の新しいマシンではまったくうまくいかないようです。

ここに簡単な例を示します:

cat test.txt

6.7 2.3e-12
5.0 3.4e-18
4.5 5.6e-16
4.2 2.1e-15
4.0 2.9e-17
2.4 2.5e-15
1.0 1.0e-17
0.5 1.0e-18

およびcat test.txt | sort -gr -k2

4.5 5.6e-16
5.0 3.4e-18
6.7 2.3e-12
4.2 2.1e-15
4.0 2.9e-17
2.4 2.5e-15
1.0 1.0e-17
0.5 1.0e-18

これはlocaleの出力です:

LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC=de_DE.utf8
LC_TIME=de_DE.utf8
LC_COLLATE="en_US.utf8"
LC_MONETARY=de_DE.utf8
LC_MESSAGES="en_US.utf8"
LC_PAPER=de_DE.utf8
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT=de_DE.utf8
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
6
Lukas Fuchs

2.3e-12は、小数点以下の文字が2であるロケールでは,と理解されます(de_DE.utf8を含むほとんどの非英語圏ではそうです)。番号は2,3e-12と記述する必要があります。

あなたはできる:

LC_ALL=C sort -grk2 < your-file

数字が英語スタイルで解釈されるようにします。

Cロケール(システムで確実に検出される唯一のロケール)では、10進数の基数は.です(入力に便利です)。

sortbashとは何の関係もないことに注意してください。これは別のコマンドです。 -gオプションは、GNU _sortの実装の非標準の拡張です。

11