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.


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.


10

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

sort -t = -k 2n

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


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

-1

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


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нιη
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.