comando sort no unix com classificação numérica

10

Eu tenho file1:

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

Arquivo2 Eu quero:

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

Basicamente numericamente tipo de arquivo1.

yisha
fonte
Quando executo um Unix simples sortno seu Arquivo1, sem opções, recebo o seu Arquivo2. O que você está fazendo diferente? O que você está deixando de fora desta questão?
Scott Scott

Respostas:

17

Eu gosto de -V --version-sort: se comporta muito bem em muitas situações, misturando strings e números

sort -V

Eu uso essa opção com muita frequência ...

Na direção certa, ls -vpara classificação de versão ls.

JJoao
fonte
10

Você precisa informar sort -npara classificar a parte após o =:

sort -t = -k 2n
Stéphane Chazelas
fonte
Recentemente, eu estava procurando isso ^^. Mas mais um P. O que fazer -k2n? Isso está relacionado à classificação numérica? obrigado.
αғsнιη
2
@KasiyA -kdefine uma chave de classificação. Veja a página de manual para detalhes. -k2ndefine uma chave de classificação que começa no segundo campo e termina no final da linha e a torna uma chave de classificação numérica.
Stéphane Chazelas
0

use sort:

sort -n file1 > file2

-n, --numeric-sort
compara de acordo com o valor numérico da string

 sort -g file1 > file 2

-g, --geral-numérica geral

Hackaholic
fonte
3
Não, todas essas linhas têm a mesma classificação, sort -npois não começam com um número. A razão pela qual elas são classificadas é a classificação de linha completa de último recurso (lexicamente, não numericamente) feita para linhas com a mesma classificação. Isso ordenaria "$lvl=17"antes "$lvl=2".
Stéphane Chazelas
@ StéphaneChazelas obrigado por apontar.
Hackaholic
Parafraseando, -ne -gsão redundantes aqui, pois a entrada não é numérica. Portanto, esta resposta é enganosa, daí o voto negativo (observe também que -ge as opções longas são específicas do GNU).
Stéphane Chazelas
mas -g é bom-numérico-tipo geral
Hackaholic
Ainda é necessário classificar valores numéricos, a diferença -né que não se limita a números decimais. Isso ainda seria tipo "$lvl=17"antes "$lvl=2"como parte do último recurso de classificação.
Stéphane Chazelas
0

Eu descobri que, você acabou de correr sort -h, vai funcionar. Eles chamam --human-numberic-sort.

sort -h file1 > file2
vincent pham
fonte
-1

sort -né o que você deseja usar. Classifica conforme ordenamos os números.sort -k 2 -n file1

Cosmo
fonte
2
Mas o OP quer classificar em ordem crescente, que é o padrão. Por que você está sugerindo ordem inversa?
G-Man diz 'Reinstate Monica'
o acima está correto quando os campos são separados por tabulações ou espaços e não funcionam no caso do OP.
αғsнιη