2013-09-10 15 views
6

Bu dosya var:Gruplar birlikte nasıl gruplanır?

rs1 1 ADD  0.7  0.75  0.45 
rs1 1 VAR  0.4  4.53  0.06 
rs1 1 USER NA  1.96  0.37 
rs2 2 ADD  1.5  0.25  0.23 
rs2 2 VAR  0.4  4.86  0.03 
rs2 2 USER NA  1.73  0.05 
rs3 3 ADD  0.29 0.76  0.97 
rs3 3 VAR  0.44 3.95  0.09 
rs3 3 USER 0.96 5.41  0.01 

$1 her değeri için, $3 yılında ADD, VAR, USER ile üç satır vardır. Dosyayı,'da USER ile $6 değerlerine göre sıralamak (ters sıralamak) istiyorum. Soru şudur ki, bunu nasıl yapabilirim VE aynı zamanda, sıralı çizgilerin yanında ADD, VAR ile ilgili hatları tut. Sıralanacak diğer iki satıra ihtiyacım yok; Sadece sorted hattının yanında olmalarına ihtiyacım var.

İstenilen çıkış

: Bu kodu denedim

rs3 3 ADD  0.29 0.76 0.97 
rs3 3 VAR  0.44 3.95 0.09 
rs3 3 USER 0.96 5.41 0.01 
rs2 2 ADD  1.5  0.25 0.23 
rs2 2 VAR  0.4  4.86 0.03 
rs2 2 USER NA  1.73 0.05 
rs1 1 ADD  0.7  0.75 0.45 
rs1 1 VAR  0.4  4.53 0.06 
rs1 1 USER NA  1.96 0.37 

, ancak yalnızca USER hatlarında $6 değerlere dayalı sıralar:

cat File | sort -k1 | uniq | sort -g -k6 > Output 

size

+0

Örnek verilerle iyi oluşturulmuş soru için +1, gerekli çıktı ve ... gasp, .... örnek kod; -). Sıralamak için birden çok tuş belirtebilirsiniz. '-k2 -k3 -k6' işe yarayabilir. İyi şanslar. – shellter

+0

Bu örneğe bir göz atın, aynı satır boyunca ilerlediğime inanıyorum http://stackoverflow.com/questions/3832068/bash-sort-text-file-by-last-field-value – TopGunCoder

+0

@shelter: Maalesef – user2162153

cevap

5

:

paste - - - < File | sort -k18,18g | xargs -n 6 

giriş formatı ile sorun o tür giriş hatlarının gruplar üzerinde çalışmak üzere bir yol vardır, Bu yüzden her grubu tek bir satıra dönüştürmeniz, sıralamanız ve sonra geri çevirmeniz gerekir. Bu sadece "USER" girişinin grupta her zaman devam etmesi durumunda çalışır.

1

ederiz İşte bir- var Ruby için liner :)

ruby -e 'File.open(ARGV.shift).readlines.entries.group_by{|e| e.split[1]}.sort.reverse.each{|e| puts e[1]}' file 

Çıktı: Bu biraz dağınık ama istediğini yapar

rs3 3 ADD  0.29 0.76  0.97 
rs3 3 VAR  0.44 3.95  0.09 
rs3 3 USER 0.96 5.41  0.05 
rs2 2 ADD  1.5  0.25  0.23 
rs2 2 VAR  0.4  4.86  0.03 
rs2 2 USER NA  1.73  0.01 
rs1 1 ADD  0.7  0.75  0.45 
rs1 1 VAR  0.4  4.53  0.06 
rs1 1 USER NA  1.96  0.37 
+0

Teşekkürler. İlk 'Dosya’yı dosya ismimle de değiştirmem gerekiyor mu? Kod hakkında biraz bilgi verir misiniz? – user2162153

+0

@ user2162153 Değiştirmeniz gereken tek şey "dosya" argümanıdır. – konsolebox

+0

Teşekkürler. Bu hatayı alıyorum. Bu hatayı alıyorum: -e: 1: undefined method 'group_by 'için # (NoMethodError) Bu arada, değerleri tersine çevrilmediğinden $ 6 cinsinden değerler düzeltildi – user2162153

İlgili konular