Isso classifica .23
após .3
:
$ sort -h -t. -k3,3 -k4,4 sort_test.txt
10.1.1.1
10.1.1.2
192.168.1.2
10.1.1.3
192.168.1.3
192.168.1.4
10.1.1.23
192.168.1.43
192.168.1.56
Eu tenho um arquivo com conteúdo
192.168.1.3
192.168.1.4
192.168.1.2
10.1.1.1
10.1.1.2
10.1.1.3
192.168.1.56
192.168.1.43
10.1.1.23
Quando dei
$ sort -h -t. -k3,4 sort_test.txt
10.1.1.1
10.1.1.2
192.168.1.2
10.1.1.23
10.1.1.3
192.168.1.3
192.168.1.4
192.168.1.43
192.168.1.56
Não foi possível entender por que o 10.1.1.23 vem antes do 10.1.1.3. Eu pensei, uma vez que dois campos são usados para comparação, o segundo campo é usado quando há um empate e deve funcionar como ordenação normal.
No caso, é melhor usar a opção -n
em vez de -h
.
Mas a principal coisa é possível expansão de .
Para minha opinião, algumas versões de sort
operam -t argumentos como regexp , então, para ter certeza, eu me ofereço para escapar de .
sort -nt\. -k3,4 sort_test.txt
Uma compreensão de por que o tipo está se comportando como "estranho"
desde que você esteja classificando da chave 3 para a chave 4, a ordenação irá ignorar todos os outros campos
sort -h -t. -k3,4 sort_test.txt
resultará em
10.1.1.1
10.1.1.2
192.168.1.2
10.1.1.23
10.1.1.3
192.168.1.3
192.168.1.4
192.168.1.43
192.168.1.56
A extração das chaves 3 e 4 dos seus resultados explicará por que os lugares de classificação 192.168.1.3
acima de 10.1.1.3
1.1
1.2
1.2------>192.168.1.2
1.23------> 10.1.1.23
1.3------>10.1.1.3
1.3
1.4
1.43
1.56
Por isso, vemos a razão pela qual o comportamento se comporta da maneira que deveria ... escolher as chaves de 1 a 4, portanto, obterá o resultado correto.
sort -h -t. -k1,4 sort_test.txt
-n
e -h
ativam comparações numéricas; Nesta situação, quando dissermos " k3,4
", k3
receberá um número de pontos flutuantes (k3 = 1,23 < 1,3) e k4="".
Com " -V
" o comportamento é melhor: números de versão 1.2 < 1,3 < 1.23.
sort -t. -k3,4V
aplicado a
192.168.10.3
192.168.1.3
192.168.1.4
192.168.1.2
10.1.1.1
10.1.1.2
10.1.1.3
192.168.1.56
192.168.1.43
10.1.1.23
192.168.9.3
retorna
10.1.1.1
10.1.1.2
192.168.1.2
10.1.1.3
192.168.1.3
192.168.1.4
10.1.1.23
192.168.1.43
192.168.1.56
192.168.9.3
192.168.10.3
O mesmo resultado será obtido com:
sort -t. -k3V
sort -V -t. -k3