polecenie sortowania w unixie z sortowaniem numerycznym

10

Mam plik 1:

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

File2 Chcę:

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

Zasadniczo numerycznie sortuj plik 1.

yisha
źródło
Kiedy uruchamiam zwykły Unix sortna twoim File1, bez żadnych opcji, otrzymuję twój File2. Co robisz inaczej? Co pozostawiasz poza tym pytaniem?
Scott,

Odpowiedzi:

17

Lubię -V --version-sort: zachowuje się bardzo dobrze w wielu sytuacjach, mieszając ciągi znaków i liczby

sort -V

Bardzo często korzystam z tej opcji ...

W pewnym kierunku, ls -vdo sortowania według wersji ls.

JJoao
źródło
10

Musisz powiedzieć, sort -naby posortować według części po =:

sort -t = -k 2n
Stéphane Chazelas
źródło
Ostatnio szukałem tego ^^. Ale jeszcze jedno pytanie. Co zrobić -k2n? Czy to dotyczy sortowania numerycznego? Dziękuję Ci.
αғsнιη
2
@KasiyA -kdefiniuje klucz sortowania. Szczegółowe informacje można znaleźć na stronie podręcznika man. -k2ndefiniuje klucz sortowania zaczynający się od drugiego pola i kończący się na końcu linii i czyni go kluczem numerycznym.
Stéphane Chazelas
0

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, - ogólne-sortowanie numeryczne

Hackaholic
źródło
3
Nie, wszystkie te linie mają ten sam ranking, sort -nponieważ nie zaczynają się od liczby. Powodem, dla którego je sortuje, jest ostateczne sortowanie ostateczne (leksykalnie, nie numerycznie) dla linii o tym samym rankingu. To by się "$lvl=17"kiedyś ułożyło "$lvl=2".
Stéphane Chazelas
@ StéphaneChazelas dzięki za wskazanie.
Hackaholic
Parafrazując -ni -gsą tutaj zbędne, ponieważ dane wejściowe nie są liczbowe. Ta odpowiedź jest myląca, stąd opinia negatywna (zauważ również, że -gi długie opcje są specyficzne dla GNU).
Stéphane Chazelas
ale -g jest dobrym ogólnym sortowaniem numerycznym
Hackaholic
To wciąż do sortowania wartości liczbowych, z tą różnicą -n, że nie ogranicza się do liczb całkowitych dziesiętnych. Że nadal sortować "$lvl=17"przed "$lvl=2"jako część ostatniej instancji sortowania.
Stéphane Chazelas
0

Odkryłem, że po prostu biegniesz sort -h, to zadziała. Nazywają to --human-numberic-sort.

sort -h file1 > file2
Vincent Pham
źródło
-1

sort -nto jest to, czego chcesz użyć. Sortuje się, gdy sortujemy liczby.sort -k 2 -n file1

Cosmo
źródło
2
Ale OP chce sortować w porządku rosnącym, co jest ustawieniem domyślnym. Dlaczego sugerujesz odwrotną kolejność?
G-Man mówi „Reinstate Monica”
powyższe jest prawidłowe, gdy pola są oddzielone tabulatorami lub spacjami i nie będą działać w przypadku OP.
αғsнιη