Üçüncü sütuna göre sıralama
4 sütunlu devasa bir dosyayla karşı karşıyayım. Sıralanmış dosyayı 3. sütununa göre stdout'ta görüntülemek istiyorum:
cat myFile | sort -u -k3
Bu numarayı yapmak için yeterli mi?
137
3
sütunların boşluk dizileriyle (POSIX/C yerel ayarında ASCII SPC ve TAB karakterleri) ayrıldığını varsayarak, geçerli yerel ayar tarafından tanımlanan sıralama düzenine göre 3rd sütununa göre sıralanmış dosyayı görüntüler.
Baştaki boşlukların sütuna dahil edildiğine dikkat edin (varsayılan ayırıcı boşluksuzdan boşluğa geçiştir), bu karşılaştırma amacıyla boşlukların yok sayılmadığı yerellerde bir fark yaratabilir, baştaki boşlukları yok saymak için
-b
seçeneğini kullanın.Bunun kabuktan tamamen bağımsız olduğunu unutmayın (tüm kabuklar bu komut satırını aynı şekilde ayrıştıracaktır, kabuklarda genellikle
sort
komutu bulunmaz).k 3
, satırların 3rd sütunu ile başlayan kısmında (baştaki boşluklar dahil) sıralama yapmaktır. C yerel ayarında, boşluk ve tab karakterleri tüm yazdırılabilir karakterlerden önce geldiği için, bu genellikle
-k 3,3` ile aynı sonucu verecektir (aynı üçüncü alana sahip satırlar hariç),u`, aynı şekilde sıralanan birkaç satır varsa (yani sıralama anahtarının aynı şekilde sıraladığı durumlarda (bu, eşit olmak ile aynı olmak zorunda değildir)) satırlardan yalnızca birini tutmaktır.
cat`, catcatenate etmek için kullanılan komuttur. Burada buna ihtiyacınız yok.
Sütunlar başka bir şeyle ayrılmışsa, ayırıcıyı belirtmek için
-t
seçeneğine ihtiyacınız vardır.Verilen örnek dosya
a
u -k 3` ile:
Satır 2 ve 3 aynı üçüncü sütuna sahiptir, ancak burada sıralama anahtarı üçüncü sütundan satır sonuna kadardır, bu nedenle
-u
her ikisini de korur. ␠ca␠d,
␠c␠cden önce sıralanır çünkü benim yerel ayarımda ilk geçişte boşluklar göz ardı edilir,
cad,
cc`den önce sıralanır.Yukarıda, 3. sütunun
␠c
olduğu durumlar için yalnızca bir tane tutulmuştur. ␠␠c` (önde gelen 2 boşluk) olanın nasıl korunduğuna dikkat edin.a b c d
ve
a c c csıralarının nasıl tersine çevrildiğine bakın. İlk durumda,
␠c␠c,
␠c␠dden önce sıralandığı için, ikinci durumda sıralama anahtarı aynı olduğu için (
␠c), satırları tam olarak karşılaştıran son çare karşılaştırması
a b c dyi
a c c c`nin önüne koyar.Boşlukları göz ardı ettiğimizde, ilk 3 satır için sıralama anahtarı aynıdır (
c
), bu nedenle son çare karşılaştırmasına göre sıralanırlar.C yerel ayarında,
␠␠c
,␠c
den önce sıralanır, çünkü karakterlerin (daha sonra tek baytların) kod noktası değerlerine göre sıralandığı (boşluğunc
den daha düşük bir kod noktasına sahip olduğu) yalnızca bir geçiş vardır.Eğer "column" ifadesini metin dosyası (4. karakter) olarak anlıyorsanız, evet, çözümünüz işe yaramalıdır (hatta
sort
un rastgele erişimle bazı bellek tasarrufu sihirleri yapmasına izin vermek içinsort -u -k3 myFile
bile olabilir). Eğer "column" ifadesini veritabanı olarak anlıyorsanız - bir ayırıcı ve değişken sütun genişliği tarafından takip edilen bir veri bütünlüğü, daha fantezi bir şeye ihtiyacınız olacaktır, örneğin bu ls -l'yi boyuta göre sıralar(bu, önemsiz
ls -lS
ile eşdeğerdir, ancak örneğe güzel bir şekilde hizmet eder).belirli sütunu kullanarak sayısal karakterler içeren herhangi bir listeyi sıralamak için doğru komuttur