2011-01-31 15 views
67

例に従って:FILE.TXTの含量:
Linuxコマンド:SORT、フィールドの数値

100 foo 
    2 bar 
    300 tuu 

'ソート-k 1,1 FILE.TXT'、行の順序は、意志使用

2 bar 
    100 foo 
    300 tuu 

どのように我々は絶対数値値に基づいて、数字からなるフィールドを並べ替えることができます?私たちが期待しているものの、変わっていませんか

答えて

93

はあなたが数値の並べ替えオプションを使用する必要がありますので、ここでman page for sort ...

-n, --numeric-sort 
      compare according to string numerical value 

での例です...

sort -n filename 
+1

は、人々をあなたのすべてをありがとう!これは配線されています。なぜなら、そのマニュアルページを何度も前後に見て、私はそのオプションを見ませんでした。ああ、私は簡略化されたマニュアルページにいました。くそー! – lukmac

+1

時にはmanページを掘るのが難しい場合があります... – Stephan

2

sort -nまたはsort --numeric-sortを使用してください。

6

をのぞき見してください:

sort -n -k 1,1 File.txt 
13

他のほとんどの回答は、

sort -n 

を参照してください。ただし、これは負の数値ではわかりません。ここで私は入力ファイル

のFedora 9にソートバージョン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リターンだけで同じ結果を使用して

P.S:

編集:

ロケール設定は、マイナス記号が順序( see here)にどのように影響するかに影響のよう

が見えます。適切な結果を得るために、私はちょうどでした:

LC_ALL=C sort -n filename.txt 
+0

警告と編集のための+1。 –

-3
echo " Enter any values to sorting: " 
read n 
i=0; 
t=0; 
echo " Enter the n value: " 
for((i=0;i<n;i++)) 
do 
read s[$i] 
done 
for((i=0;i<n;i++)) 
do 
for((j=i+1;j<n;j++)) 
do 
if [ ${s[$i]} -gt ${s[$j]} ] 
then 
t=${s[$i]} 
s[$i]=${s[$j]} 
s[$j]=$t 
fi 
done 
done 
for((i=0;i<n;i++)) 
do 
echo " ${s[$i]} " 
done 
+0

その実際に働いて – karthik

+1

このコードが何をしているかについてのテキストの説明を少し追加してください。 – Stedy

-1

を使用ソート-nr降順でソートします。

Sort

は、さらに参考のために

48

免責事項を上記のmanページを参照してください参照してください:私はこの質問にはずっと前に答え​​たけど、多分これは質問のいくつかの訪問者への参考になります。

あなたが期待どおりに動作しません、その後sort -nでソートログのローリングの例ファイル名のために、テキスト&数字を混在している文字列をソートしている場合:その場合はオプション-V

$ 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 

は、トリックを行います。

manページから
$ 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 

-V, --version-sort 
      natural sort of (version) numbers within text 
あなたは、次のコマンドを実行する必要があります
+0

これは私を立ち上げたので、ありがとう!私のcygwin上で私を台無しにしたもう一つのことは、文字を取り除いて数字だけを残すために 'ls'を' sed'で置き換えても、明らかに色付きの出力が物事にも影響していたことです。したがって、 'ls --color = never'を実行することによっても違いが生じました。 –

1

sort -n -k1 filename

それを行う必要があること:)