Estou lendo este blog no momento: https://www.baeldung.com/linux/dir-find-largest-file-recursively
E estou perguntando sobre este comando:
find /usr/lib -type f -printf "%s\t%p\n" | sort -n | tail -1
92107656 /usr/lib/x86_64-linux-gnu/libwireshark.so.13.0.3
O %s
irá imprimir o tamanho e %p
imprimirá o caminho. Mas como você sort -n
saberá que precisa classificar por tamanho e não por caminho?
Eu sei que esta pode ser uma pergunta estúpida, mas de qualquer forma eu perguntei.
De acordo com os documentos, https://man7.org/linux/man-pages/man1/sort.1.html
-n, --numeric-sort
compare according to string numerical value
Isso classifica usando o valor numérico da string. Como ele sabe que precisa examinar especificamente a primeira coluna?
É daí
info coreutils sort invocation
que explica comosort
funciona:Então,
sort -n
classificaremos a entrada numericamente (conforme explicado mais abaixo), comparando linhas inteiras, já que nenhum campo-chave é especificado:Porque é literalmente isso que o tipo faz, de qualquer maneira. Ele classifica as linhas. A classificação sempre acontece comparando o início de duas strings (em todos os casos, não apenas o
sort
comando; verifique com você a classificação das palavras no papel), e somente se os inícios forem iguais, avançando um elemento e comparando-o, e assim por diante.No
-n
modo,sort
simplesmente lê os caracteres no início de cada linha, desde que formem um número, e então interpreta esse número como o primeiro elemento. O segundo elemento torna-se então o primeiro caractere após o que pode ser interpretado como número, o terceiro Elemento é o segundo caractere após o que pode ser interpretado como número e assim por diante).Nenhum modo faz
sort
nada além de classificar as coisas e, portanto, sempre compara os primeiros elementos primeiro, e a pergunta "por que não classifica por alguma parte das linhas que vem depois" nunca surge.Portanto, não há nada
sort
(sem usar seu-k
sinalizador) que considere seus dados como estando em colunas. Ele classifica cadeias de caracteres, com a exceção especial que-n
o faz tentar interpretar todos os caracteres no início dessas cadeias que podem ser interpretados como um número como um único "supercaractere".Não existe o conceito de colunas , mas existe o conceito de campos , com
--field-separator
opção.Então, cada campo pode ter um arquivo
--key=KEYDEF
. As linhas podem ser classificadas por vários campos-chave (que podem ocorrer em qualquer ordem na linha) e qualquer definição de chave pode especificar independentemente ignorar espaços em branco, chave numérica e ordem crescente ou decrescente. Existem onze subopções disponíveis para qualquer especificação principal.A
man sort
página é totalmente inadequada. Pelo menos consulteinfo sort
.Você também pode ler https://www.gnu.org/software/coreutils/manual/coreutils.pdf e rolar para baixo até
Section 7.1 sort: Sort text files
obter dez páginas de detalhes, incluindo algo como:Esta seção também se refere ao idioma DSU (Decorate, Sort, Undecorate), que é totalmente flexível.