Bir alan için sayısal değerlerine göre bir dosya nasıl sıralanır?


114

Örnek file.txt:

  100 foo
  2 bar
  300 tuu

Kullanırken sort -k 1,1 file.txt, satırların sırası değişmeyecek, ancak şunları bekliyoruz:

  2 bar
  100 foo
  300 tuu

Mutlak sayısal değere göre sayılardan oluşan bir alanı nasıl sıralayabilirim?

Yanıtlar:


149

Sıralama için man sayfasına bir göz atın ...

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

İşte bir örnek ...

sort -n filename

1
Hepinize teşekkür ederim millet! Bu kablolu çünkü onun man sayfasına birkaç kez ileri geri baktım ve bu seçeneği görmedim. Ah, basitleştirilmiş bir man sayfasındaydım. Lanet olsun!
lukmac

1
Lütfen kayan noktalar için kullanmanın -g, --general-numeric-sortdaha tavsiye edilebileceğini unutmayın . Bu ayrıca bilimsel gösterime izin verir, örneğin 1.234E10 vb.
Herpes Free Engineer

104

Karışık metin ve sayılardan oluşan dizeleri sıralıyorsanız, örneğin kayan günlüklerin dosya adları ile sıralama sort -nbeklendiği gibi çalışmaz:

$ 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

Bu durumda seçenek -Vhile yapar:

$ 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 sayfasından:

   -V, --version-sort
          natural sort of (version) numbers within text

1
Bu beni heyecanlandırdı, bu yüzden teşekkür ederim! Beni, en azından cygwin'imde mahveden diğer bir şey de , harfleri çıkarmak ve sadece sayılar bırakmak için lsgeçişleri seddeğiştirirken bile , görünüşe göre renkli çıktının işleri de etkiliyor olmasıydı. Yani koşmak ls --color=neverda bir fark yarattı.
Max Starkenburg

Harika, -Vtam da aradığım şey buydu. Önce man sayfalarına bakmayı alışkanlık haline getirmeliyim.
srowley

18

Pekala, buradaki diğer cevapların çoğu,

sort -n

Ancak, bunun negatif sayılar için çalıştığından emin değilim. İşte Fedora 9'da 6.10 sıralama sürümüyle aldığım sonuçlar.

Giriş dosyası:

-0.907928466796875
-0.61614990234375
1.135406494140625
0.48614501953125
-0.4140167236328125

Çıktı:

-0.4140167236328125
0.48614501953125
-0.61614990234375
-0.907928466796875
1.135406494140625

Açıkçası sayısal değere göre sıralanmamış.

Öyleyse, daha kesin bir cevabın kullanılacağını tahmin ediyorum, sort -nancak ancak tüm değerler pozitifse.

Not: sort -gBu örnek için kullanmak sadece aynı sonuçları döndürür

Düzenle:

Görünüşe göre yerel ayarlar, eksi işaretinin sıralamayı nasıl etkilediğini etkiliyor ( buraya bakın ). Doğru sonuçları almak için yaptım:

LC_ALL=C sort -n filename.txt

7

Sayısal sıralama seçeneğini kullanmalısınız:

sort -n -k 1,1 File.txt


1

Aşağıdaki komutu yapmalısınız:

sort -n -k1 filename

Bunu yapmalı :)


-1

Azalan düzende sıralamak için sort -nr kullanın. başvurmak

Çeşit

Daha fazla referans için yukarıdaki Man sayfasına bakın


-4
    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

1
Bu kodun ne işe yaradığına dair biraz metin açıklaması eklemek ister misiniz?
Stedy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.