Son sütuna göre sayısal sıralama nasıl yapılır?


23

Bu girdi var:

sdkxyosl 1
safkls 2
asdf--asdfasxy_asd 5
dkd8k  jasd 29
sdi44sw 43
asasd afsdfs 10
rklyasd 4

Bu çıktıya ihtiyacım var:

sdi44sw 43
dkd8k  jasd 29
asasd afsdfs 10
asdf--asdfasxy_asd 5
rklyasd 4
safkls 2
sdkxyosl 1

Yani satırları son sütuna göre sıralamak gerekiyor.

Bir satırda kaç sütun olduğunu bilmiyorum.

Bunu nasıl yapacağımı anlayamıyorum. "Perl güçlerim" yok. Ben sadece sed, awk, cut, vb ile ortalama komut dosyası yetkileri var ..

Birisi nasıl yapılacağını biliyor mu?

Yanıtlar:


34

Aşağıdaki komut satırı awk, file.txt dosyalarının her satırının son alanının başına kullanılır, ters sayısal sıralama yapar, ardından cuteklenen alanı kaldırmak için kullanılır:

awk '{print $NF,$0}' file.txt | sort -nr | cut -f2- -d' '

Aman tanrım ... Ben RS $ hakkında bilmiyordum! çok teşekkür ederim!!!!!
LanceBaynes

@forcefsck: Sadece bunun mümkün olduğunu düşünmüyorum sort -k. begfieldGNU içinde işlev sıralama sadece sıfıra geri sayım yapar. Benim için dekore et-sırala-dekore (DSU) yaklaşımın en iyi yol gibi görünüyor.
Mikel

İlginin dışında, neden $NF,$RSolmasın $NF,$0? Bunu bilmiyordum $RS. (Sanırım buna eşdeğer $NF,$"\n", aynı şey yapıyor, ama bu da bence şaşırtıcı.)
Mikel

2
@ johnny8888, @forcefsck: awk $olarak herhangi bir ifade gelebilir. “ Negatif olmayan bir tamsayı dışındaki herhangi bir değeri değerlendiren alan numarası ifadesinin etkisi belirtilmemiştir ”. GNU awk (sistemimde) bir dizeyi "\n"sıfır gibi davranır . Diğerleri (örneğin, A, W ve K tarafından orijinal uygulama) bir hata mesajıyla iptal edilir. Eğer RSbir rakamı olması oldu, herhangi bir uygulamaya karşılık gelen alan iyi olur. Yani bunu yapma, kullan $0.
Gilles 'SO- kötü olmayı bırak'

1
Gerçekten temiz! Neler olup bittiğine dair uzun açıklama: awk ile önce son alanı, ardından tüm kaydı yazdırın, sayısal olarak tersine sıralayın, ardından kes kullanarak ilk sütunu kesin.
phyatt
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.