polecenie sort w systemie unix z sortowaniem numerycznym

Mam plik1:

"$lvl=57" "$lvl=20" "$lvl=48" "$lvl=17" "$lvl=58" 

Plik2 I chcesz:

"$lvl=17" "$lvl=20" "$lvl=48" "$lvl=57" "$lvl=58" 

Zasadniczo sortowanie numeryczne pliku1.

Komentarze

  • Kiedy uruchamiam zwykły Unix sort na Twoim File1, bez żadnych opcji, otrzymuję Twój File2. Co robisz inaczej? Co pomijasz w tym pytaniu?

Odpowiedź

Podoba mi się -V –version-sort: zachowuje się bardzo dobrze w wielu sytuacjach podczas mieszania ciągów i liczb

sort -V 

Bardzo często używam tej opcji …

W pewnym kierunku , ls -v for version-sort ls.

Odpowiedź

Musisz powiedzieć sort -n, aby posortował część po =:

sort -t = -k 2n 

Komentarze

  • Ostatnio tego szukałem ^^. Ale jeszcze jedno P. Co zrobić -k2n? Czy to ma związek z sortowaniem numerycznym? dziękuję.
  • @KasiyA -k definiuje klucz sortowania. Zobacz stronę podręcznika po szczegóły. -k2n definiuje klucz sortowania rozpoczynający się w drugim polu i kończący na końcu wiersza i czyni go liczbowym kluczem sortowania.

Odpowiedz

Okazało się, że po prostu uruchomiłeś sort -h, to zadziała. Nazywają to --human-numberic-sort.

sort -h file1 > file2 

Odpowiedź

użyj sortowania:

sort -n file1 > file2 

-n, –numeric-sort
porównaj według wartości liczbowej ciągu

 sort -g file1 > file 2 

-g, –general-numeric-sort

Komentarze

  • Nie, wszystkie te linie mają ten sam ranking z sort -n, ponieważ nie ' nie zaczynają się od liczby. Powodem, dla którego je sortuje, jest sortowanie pełnowierszowe w ostateczności (leksykalnie, a nie numerycznie) wykonane dla wierszy o tym samym rankingu. To posortowałoby "$lvl=17" przed "$lvl=2".
  • @St é phaneChazelas dzięki za wskazanie.
  • Parafrazując, -n i -g są tutaj zbędne, ponieważ dane wejściowe nie są numeryczne . Tak więc ta odpowiedź jest myląca, stąd głos przeciw (zwróć też uwagę, że -g i długie opcje są specyficzne dla GNU).
  • ale -g jest dobre ogólne-numeryczne- sort
  • To, że ' nadal służy do sortowania wartości liczbowych, różnica z -n polega na tym, że s nie ogranicza się do dziesiętnych liczb całkowitych. To nadal posortowałoby "$lvl=17" przed "$lvl=2" jako część sortowania w ostatniej instancji.

Odpowiedź

sort -n jest tym, czego chcesz użyć. Sortuje tak, jak sortujemy liczby. sort -k 2 -n file1

Komentarze

  • Ale operator operacyjny chce sortować w kolejności rosnącej, która jest domyślna. Dlaczego sugerujesz odwrotną kolejność?
  • powyższe jest poprawne, gdy pola są oddzielone tabulatorami lub spacjami i nie będą działać w OP s.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *