8

指数付きのフロートを含むファイルがあり、それらを並べ替えたいと考えています。AFAIK 'sort -g' が必要です。しかし、すべての指数を捨ててフロートをソートしているようです。したがって、出力は次のようになります (これは私が望んでいたものではありません)。

$ cat file.txt | sort -g
8.387280091e-05
8.391373668e-05
8.461754562e-07
8.547354437e-05
8.831553093e-06
8.936111118e-05
8.959458896e-07

これは私に2つの質問をもたらします:

  1. 「sort -g」が期待どおりに機能しないのはなぜですか?
  2. bashコマンドを使用してファイルをソートするにはどうすればよいですか?
4

3 に答える 3

8

問題は、一部の国では、システム レベルの,代わりに小数点記号として使用することで、ローカル設定がこれを台無しにする可能性があることです。ターミナル.に入力して確認します。localeエントリがあるはずです

LC_NUMERIC=en_US.UTF-8

値がそれ以外の場合は、ロケール ファイルを編集して上記の値に変更します。

sudo gedit /etc/default/locale

それでおしまい。次のようにして、この値を一時的に使用することもできます

LC_ALL=C sort -g file.dat

LC_ALL=C端末に書き込むのは短くなりますが、時刻形式などの他のシステム全体の動作を変更する可能性があるため、ロケールファイルに配置することは望ましくない場合があります。

于 2015-01-30T15:13:47.773 に答える
4

あなたの方法は絶対に正しいです

cat file.txt | sort -g

上記のコードが機能しない場合は、これを試してください

sed 's/\./0000000000000/g' file.txt | sort -g | sed 's/0000000000000/\./g'

変換 '。' '0000000000000' に並べ替え、'.' で再度置換します。数値と入力の不一致を避けるために、置換する「0000000000000」を選択しました。数値は自分で操作できます。

于 2012-04-26T10:13:44.843 に答える