2011-12-28 18 views
8

Mam listę uchwał (urządzeniach przenośnych, monitorów itp ...) i chcę, aby posortować je według rozdzielczości przy użyciu bash/vimbash sortowania rozdzielczości

mam (nie zamówiony):

1024 x 480 
96 x 120 
1024 x 600 
100 x 120 
800 x 1280 
64 x 98 
640 x 320 
64 x 128 
640 x 960 
800 x 480 
80 x 120 

wtedy kiedy zrobić:

cat file | sort -u 

uzyskać:

100 x 120 
1024 x 480 
1024 x 600 
640 x 320 
640 x 960 
64 x 128 
64 x 98 
800 x 1280 
800 x 480 
80 x 120 
96 x 120 

dlaczego tak nie jest posortowane i jak mogę to zrobić?

64 x 98 
64 x 128 
80 x 120 
96 x 120 
100 x 120 
640 x 320 
640 x 960 
800 x 1280 
800 x 480 
1024 x 480 
1024 x 600 

Odpowiedz

16

można użyć

sort -n -k1 -k3 file 

ten sposób sortowania w oparciu o prefiks numeryczny, aby otrzymać listę posortowaną według pierwszego numeru

co daje

64 x 98 
64 x 128 
80 x 120 
96 x 120 
100 x 120 
640 x 320 
640 x 960 
800 x 480 
800 x 1280 
1024 x 480 
1024 x 600 
+0

Dlaczego '-u"? Spowoduje to spadek liczby wpisów. – Telemachus

+0

masz rację, poprawione – MahdeTo

+0

dziękuję bardzo – aki

1
sort -n -k1 -k3 file 
  • -n jest zmuszenie numeryczny sortowania
  • -k mówi je uporządkować za pomocą pierwszej części następnie trzecią część napisu
  • to nazwa pliku z plik. Nie ma powodu, aby używać cat. Użycie jest:

    sort [OPCJA] ... [PLIK] ...

man sort

+0

Niestety wciąż widzę: 64 x 128, 64 x 98 – aki

+0

@gpojd: jesteś błędnie określając, w jaki sposób '-k' powinien działać. Powtórzyć stronę podręcznika: "uruchom klucz w POS1, zakończ go w POS2". Myślę, że jeśli chce sortować na obu polach, będzie potrzebował czegoś bardziej zaawansowanego, np. 'Awk'. –

+0

sprawdź moją odpowiedź na zachowanie @DanFego – MahdeTo

0

dlaczego nie użyć czegoś podobnego (ważna część oto rodzaj argumenty):

xrandr -q | grep " " | awk '{ print $1 }' | sort --unique --field-separator "x" -h 
Powiązane problemy