2013-08-12 11 views
22

Lütfen bunun "Unix'teki alfasayısal verileri sıralama" sorusunun tekrarı olduğunu düşünmeyin ... Diğer cevaplara baktım ve vakamın biraz farklı olduğunu düşünüyorum!Unix'te bir dosyayı hem alfabetik hem de sayısal olarak farklı alanlarda nasıl sıralayabilirim?

böyle verilere sahip:

A 192 
D 112 
D 188 
C 091 
A 281 
B 919 

... Ve 1 (alfabetik) ilk sütunu sıralamak istiyorum ve sonra 2. sütun tarafından (sayısal olarak). Ben kullanarak çalıştı:

sort -n -k1,2 

... Ama bu beni doğru ilk alan için sıralanır verdi ama sonra yanlış ikinci alan (1000,1002,1003,10,1 için sıralama ... yerine 1 , 10,1000,1002,1003).

Lütfen birisi bu iki sütunu nasıl istediğim gibi sıralayabileceğimizi önerebilir mi?

+0

sıralama -k4,4n -k1,1 ???? –

+0

Her iki sütunun dize 1 ile 50 karakter arasında olabileceğini ve her satırın farklı – jake9115

+0

'sort -k1 -nk3 dosyasının çalışmasının gerektiğini belirtmeliyim. – anubhava

cevap

28

böyle kullanmayı deneyin: -

sort -k1,1 -k4,4n 
  • -n: Sıralama verilerine/Verilen sütun numarasını kullanarak alanlara: Program sıralama
  • -k seçmesi sayısal değerine göre yapar. Örneğin, -k2 seçeneği, programın ikinci
    veri sütununu kullanarak sıralamasını yaptı. -k 3,3n -k 4,4n seçeneği her sütunu sıralar. İlk
    , 3. sütunu ve ardından 4. sütunu sıralar.
+0

Komut/cevap için teşekkürler! Bunu denedim ve bununla nereye gittiğinizi görüyorum, ancak verilerim için çalışmaz, çünkü her sütundaki değerler sabit bir karakter uzunluğudur. Örneğimde, sütun1 için karakter uzunluğunu 1 ve sütun2 için 3 kullandım, ancak gerçekte karakter uzunluğu, çizgiye bağlı olarak 1 ile 50 arasındadır. Bunu aşmanın bir yolu var mı? – jake9115

+0

Önce sütun 2'yi sıralamak için komutu tersine çevirdim, sonra sütun 1: 'sort -k1,1 -k4,4n' ve bu işe yarıyor. Komutun nasıl çalıştığını açıklar mısın? Ben -k4,4n' – jake9115

+0

@ jake9115 ile yabancı değilim: - Her iki açıklama ile cevabımı güncellendi. Umarım yardımcı olur. Bu gerçekten size yardımcı olsaydı bir cevap olarak kabul etmeyi unutmayın;) –

6

Bu çalışması gerekir:

sort -t "," -k1,1 -k2n,2 file 
İlgili konular