Alanın bir bölümüne göre dosya sıralama


11

Bir dosyayı sıralamak istiyorum:

   D104HN-D104HA      8.320      4.521   1.69e+05 -- 
   D104HN-D104HB*      8.320      2.823   2.93e+05 -- 
   A90HB#-A90HA      1.655      4.207   7.12e+05 -- 
   A90HB#-F91HA      1.653      4.411   8.59e+04 -- 
   A114HB#-A114HA      1.253      4.098   7.67e+05 -- 
   A114HB#-R111HA      1.251      3.929   1.76e+05 -- 
   A114HB#-W110HA      1.253      4.451   3.68e+04 -- 
   F91HE*-F91HZ      7.237      7.122   7.85e+05 -- 
     F91HE*-K92HA      7.242      3.910   4.88e+04 -- 

ve bunu al

   A90HB#-A90HA      1.655      4.207   7.12e+05 -- 
   A90HB#-F91HA      1.653      4.411   8.59e+04 -- 
   F91HE*-F91HZ      7.237      7.122   7.85e+05 -- 
   F91HE*-K92HA      7.242      3.910   4.88e+04 -- 
   D104HN-D104HA      8.320      4.521   1.69e+05 -- 
   D104HN-D104HB*      8.320      2.823   2.93e+05 -- 
   A114HB#-A114HA      1.253      4.098   7.67e+05 -- 
   A114HB#-R111HA      1.251      3.929   1.76e+05 -- 
   A114HB#-W110HA      1.253      4.451   3.68e+04 -- 

Yani, satırdaki boşluk olmayan ilk dizinin ikinci ve sonraki karakterlerine sayısal olarak sıralayın.


görünüşe göre editör dosya için kullandığım formatı tutmadı ....
edith

sortKomutu denedin mi?
Eric Renouf

evet, ama görünüşe göre tu düzgün kullanmak nasıl bilmiyorum .... Denedim: sıralama -b + 0.1n -1 ama aynı zamanda sıralama -n -k1,1 -k1,4 (ve diğerleri) ama hiçbiri o çalıştı
edith

1
İkinci karakterden başlayarak sayıya göre sıralamak ister misiniz?
pfnuesel

kesinlikle. probleme dosyada, ilk alandan önce farklı sayıda boşluk var
edith

Yanıtlar:


19
sort -k 1.2bn < file

Sıralar numerically bir üzerinde kbaşlayan ey 2nd karakterine 1st lider görmezden alanında bLanks (ve satırın sonunda biten, ama bu sadece ondalık basamak başlangıç sırasını dikkate sayısal sıralama için önemli değil).

Bu iki çizgi arasında olduğu gibi bir kravat varsa unutmayın:

    F91HE*-K92HA      7.242      3.910   4.88e+04 --
  F91HE*-F91HZ      7.237      7.122   7.85e+05 --

Daha sonra, sipariş, iki satırı tamamen dizeler olarak karşılaştıran son çare türüne dayanacaktır.

Bazı yerel sayesinde boşlukları F91 biri (aynı K92 önce gelirdi ki bu durumda dizeleri karşılaştırmak için ilk etapta göz ardı edileceği Fönce türlü K). C yerelinde olduğu gibi diğerleri ile boşluklar göz ardı edilmeyecek ve K92 daha sonra F91'den önce gelecekti (daha önce boşluklar F).

Yerel ayardan bağımsız olarak, önde gelen boşlukları yok sayacak bir son çare türü için şunları yapabilirsiniz:

sort -k 1.2bn -k 1b < file

Bu 1bsatır (birinci anahtardaki bağlar üzerine) satırın önde gelen boşlukları görmezden gelen ilk alanla başlayan bölümüne göre sıralanır.

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.