comando sort
Propósito
Classificam arquivos, mesclam arquivos que já são sorteados e verifica arquivos para determinar se foram sorteados.
Sintaxe
sort [ -A ] [-b ] [-c ] [ -d ] [ -f ] [ -i ] [ -m ] [ -n ] [ -r ] [ -u ] [ -o OutFile ] [ -t Caractere ] [ -T Diretório ] [ -y [ Kilobytes ] ] [ -z RecordSize ] [ [ + [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ] [ eu ] [ n ] [ r ] ] [ - [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ] [ eu ] [ n ] [ r ] ] ] ... [ -k KeyDefinition ] ... [ Arquivo ... ]
Descrição
O comando sort classificam as linhas nos arquivos especificados pelo parâmetro File e grava o resultado na saída padrão. Se o parâmetro File especificar mais de um arquivo, o comando sort concatene os arquivos e classificá-los como um arquivo. Um -(sinal de menos) no lugar de um nome de arquivo especifica entrada padrão. Se você não especificar nenhum nome de arquivo, o comando classificam entrada padrão. Um arquivo de saída pode ser especificado com a sinalização -o .
Se nenhuma sinalizadora for especificada, o comando sort classificam linhas inteiras do arquivo de entrada com base na ordem de ordenação do locale atual.
Chaves de classificação
Uma chave de classificação é uma parte de uma linha de entrada que é especificada por um número de campo e um número de coluna. Os campos são partes de linhas de entrada que são separadas por separadores de campo. O separador de campo padrão é uma sequência de um ou mais caracteres em branco consecutivos. No entanto, esses caracteres em branco são considerados como uma parte do campo a seguir para fins de triagem. Você pode especificar a opção -b para ignorar esses principais caracteres em branco. Um separador de campo diferente pode ser especificado usando a sinalização -t . A guia e os caracteres de espaço são os caracteres em branco nos códigos de idioma C e Inglês Language.
Ao usar chaves de classificação, o comando sort primeiro classificam todas as linhas sobre o conteúdo da primeira chave de classificação. Em seguida, todas as linhas cujas primeiras chaves de classificação são iguais são classificadas sobre o conteúdo da segunda chave de classificação, e assim por diante. As chaves de classificação são numeradas de acordo com a ordem em que aparecem na linha de comando. Se duas linhas classificam igualmente em todas as chaves de classificação, as linhas intetas são então comparadas com base na ordem de ordenação no locale atual.
Ao numerar colunas dentro de campos, os caracteres em branco em um separador de campo padrão são contados como parte do campo a seguir. Caracteres separadores de campo especificados pela sinalização -t não são contados como partes de campos. Os caracteres em branco líderes podem ser ignorados usando a bandeira -b .
As chaves de classificação podem ser definidas usando os dois métodos a seguir:
- -k KeyDefinition
- FSkip.CSkip (versão obsolescente).
Definição da chave de classificação usando o sinalizador -k
O sinalizador -k KeyDefinition usa o seguinte formato:
- k [FStart[. CStart]][ modificador][ , [FEnd[. Fim CE]][ modificador]]
A chave de classificação inclui todos os caracteres iniciados com o campo especificado pela variável FStart e a coluna especificada pela variável CInício e finalizando com o campo especificado pela variável FEnd e a coluna especificada pela variável CEnd . Se Fend não for especificado, o último caractere da linha será assumido. Se CEnd não for especificado o último caractere no campo FEnd é assumido. Qualquer campo ou número da coluna na variável KeyDefinition pode ser omitido. Os valores padrão são:
| Item | Descrição |
|---|---|
| FStart | Início da linha |
| CIniciar | Primeira coluna no campo |
| FEnd | Fim da linha |
| CEnd | Última coluna do campo |
Se houver algum espaço entre os campos, sort os considera como campos separados.
O valor da variável Modifier pode ser uma ou mais das letras b, d, f, i, n, ou r. Os modificadores aplicam-se apenas à definição de campo a que estão apegados e têm o mesmo efeito que a bandeira da mesma letra. A letra modificadora b aplica-se apenas ao final da definição de campo a qual está anexada. Por exemplo:
-k 3.2b,3r
especifica uma chave de classificação iniciando na segunda coluna não em branco do terceiro campo e estendendo-se até o final do terceiro campo, com a classificação sobre esta chave a ser feita em ordem de ordenação reversa. Se a variável FStart e a variável CStart caem além do fim da linha ou após a variável FEnd e a variável CEnd , então a chave de classificação será ignorada.
Uma chave de classificação também pode ser especificada da seguinte maneira:
[+[FSkip1] [.CSkip1] [Modifier]]] [-[FSkip2]] [.CSkip2] [Modifier]]
A variável +FSkip1 especifica o número de campos ignorados para atingir o primeiro campo da chave de classificação e a variável +CSkip especifica o número de colunas saltadas dentro desse campo para atingir o primeiro caractere na chave de classificação. A variável -FSkip especifica o número de campos ignorados para atingir o primeiro caractere após a chave de classificação, e a variável -CSkip especifica o número de colunas a pular dentro desse campo. Qualquer contagem de pulos de campo e de coluna pode ser omitida. Os padrões são:
| Item | Descrição |
|---|---|
| FSkip1 | Início da linha |
| CSkip1 | Zero |
| FSkip2 | Fim da linha |
| CSkip2 | Zero |
Os modificadores especificados pela variável Modifier são os mesmos que na definição de classificação de chave de sinalizadores -k .
Os números de campo e coluna especificados por +FSkip1.CSkip1 variáveis são geralmente uma a menos do que o campo e o número da coluna da própria chave de classificação porque essas variáveis especificam quantos campos e colunas pulam antes de atingir a chave de classificação. Por exemplo:
+2.1b -3r
especifica uma chave de classificação iniciando na segunda coluna não em branco do terceiro campo e estendendo-se até o final do terceiro campo, com a classificação sobre esta chave a ser feita em ordem de ordenação reversa. A declaração+2.1bespecifica que dois campos são ignorados e, em seguida, os blancos principais e mais uma coluna são ignorados. Se o +FSkip1.CSkip1 variáveis caem além do fim da linha ou após as variáveis -FSkip2.CSkip2 , então a chave de classificação é ignorada.
Nota: O número máximo de campos em uma linha é 32.
Sinalizações
| Item | Descrição |
|---|---|
| -A | Classificam-se em uma base byte-por-byte usando ordem de ordenação ASCII em vez de ordenação no locale atual. |
| -b | Ignora espaços e guias líderes para encontrar a primeira ou última coluna de um campo. |
| -C | Verifica se a entrada é classificada de acordo com as regras de ordenação especificadas nas bandeiras. Um valor não zero é retornado se o arquivo de entrada não estiver corretamente classificado. |
| -C | Verifica se a entrada é classificada de acordo com as regras de ordenação especificadas nas bandeiras, exceto que uma mensagem de aviso não deve ser enviada para erro padrão se houver um transtorno ou, com a opção -u , uma chave duplicada for detectada. |
| -d | Classificações usando ordem de dicionário. Apenas letras, digitos e espaços são considerados em comparações. |
| -f | Altera todas as letras minúsculas para maiús-maiúsculas antes da comparação. |
| -i | Ignora todos os caracteres não imprimidos durante as comparações. |
| -k KeyDefinition | Especifica uma chave de classificação. O formato da opção KeyDefinition é: [FStart[. CStart]][ modificador][ , [FEnd[. Fim CE]][ modificador]] A chave de classificação inclui todos os caracteres iniciados com o campo especificado pela variável FStart e a coluna especificada pela variável CInício e finalizando com o campo especificado pela variável FEnd e a coluna especificada pela variável CEnd . O valor da variável Modifier pode ser b, d, f, i, n, ou r. Os modificadores são equivalentes às bandeiras da mesma letra. Quando um modificador é anexado a uma definição de chave, então nenhuma bandeira é aplicada a ele. |
| -m | Mescla vários arquivos de entrada apenas; a entrada é assumida para já estar classificada. |
| -n | Classificam campos numéricos por valor aritmético. Um campo numérico pode conter espaços em branco principais, um sinal de menos opcional, digitos decimais, caracteres de separador de milhares e um caractere de radix opcional. A triagem numérica de um campo contendo qualquer caractere não numérico dá resultados imprevisíveis. |
| -o OutFile | Direciona saída para o arquivo especificado pelo parâmetro OutFile em vez de saída padrão. O valor do parâmetro OutFile pode ser igual ao parâmetro File . |
| -r | Reverte a ordem do tipo especificado. |
| -t Caráter | Especifica Character como o caractere separador de campo único. |
| -u | Suprime a todos mas uma linha em cada conjunto de linhas que classificam igualmente de acordo com as chaves de classificação e opções. |
| -T Diretório | Coloca todos os arquivos temporários que são criados no diretório especificado pelo parâmetro Directory . |
| - y [Kilobytes ] | Inicia o comando sort usando o número de kilobytes de armazenamento principal especificados pelo parâmetro Kilobytes e adicio armazenamento conforme necessário. (Se o valor especificado no parâmetro Kilobytes for menor que o site de armazenamento mínimo ou maior do que o máximo, o mínimo ou máximo será usado em vez disso). Se a sinalização -y for omitida, o comando sort começa com o tamanho de armazenamento padrão. A sinalização -y0 começa com armazenamento mínimo, e a sinalização -y (sem valor Kilobytes ) começa com armazenamento máximo. A quantidade de armazenamento utilizada pelo comando sort afeta o desempenho significativamente. Classificação de um pequeno arquivo em uma grande quantidade de armazenamento é desperdício. |
| -z RecordSize | Previne a finalização anormal se alguma das linhas que estão sendo sorteadas for maior do que o tamanho do buffer padrão. O tamanho do buffer padrão é 20 KB. Quando as bandeiras -c ou -m são especificadas, a fase de classificação é omitida e um tamanho de buffer padrão do sistema é usado. Se linhas classificadas forem mais longas que esse tamanho, o comando sort terminará anormalmente. A opção -z especifica gravação da linha mais longa na fase de classificação para que os buffers adequados possam ser alocados na fase de mesclagem. A variável RecordSize deve designar um valor em bytes igual ou maior que a linha mais longa a ser mesclada. O tamanho da linha mais longo que é suportado sob o código de idioma C é aproximadamente 2M caracteres e o tamanho da linha mais longo que é suportado sob o código de idioma não C é 1M caracteres. A opção -z é ineficaz sob a locale C. |
Status de saída
Esse comando retorna os valores de saída a seguir:
| Item | Descrição |
|---|---|
| 0 | Todos os arquivos de entrada foram saída com sucesso, ou -c foi especificado e o arquivo de entrada foi corretamente sorteado. |
| 1 | Sob a opção -c , o arquivo não foi ordenado como especificado, ou se as opções -c e -u foram ambas especificadas, duas linhas de entrada foram encontradas com chaves iguais. |
| > 1 | Ocorreu um erro. |
Exemplos
- Para classificar ofruitsarquivo com a variável de ambiente LC_ALL, LC_COLLATEou LANG configurada comoEn_US, digite:
Esta sequência de comandos exibe o conteúdo dofruitsarquivo classificado em ordem lexicográfica crescente. Os caracteres em cada coluna são comparados um por um, incluindo espaços, dígitos e caracteres especiais. Por exemplo, se ofruitsarquivo contém o texto:LANG=En_US sort fruits
o comando sort exibe:banana orange Persimmon apple %%banana apple ORANGE
Na sequência de colagem ASCII, o%(sinal de percentual) precede as letras maiúsculas, que precedem letras minúsculas. Se o seu locale atual especifica um conjunto de caracteres diferente de ASCII, seus resultados podem ser diferentes.%%banana ORANGE Persimmon apple apple banana orange - Para classificar em ordem de dicionário, digite:sort -d fruitsEsta sequência de comandos classificam e exibe o conteúdo dofruitsarquivo, comparando apenas letras, dígitos e espaços. Caso o comandofruitsarquivo é o mesmo que no exemplo 1, então o comando sort exibe:
A bandeira -d ignora o%(sinal de percentual) porque não é uma letra, dígito ou espaço, colocando%%bananacom obanana.ORANGE Persimmon apple apple %%banana banana orange - Para agrupar linhas que contêm caracteres maiúsestoos e especiais com linhas minúsculas semelhantes, digite:A sinalização -d ignora caracteres especiais e a bandeira -f ignora diferenças no caso. Com o conjunto de variáveis de ambiente LC_ALL, LC_COLLATEou LANGC, a saída para ofruitsarquivo se torna:
apple apple %%banana banana ORANGE orange Persimmon - Para classificar, remover linhas duplicadas, digite:A sinalização -u diz ao comando sort para remover linhas duplicadas, tornando cada linha do arquivo única. Esta sequência de comandos exibe:
Não só a duplicataappleremovido, masbananaeORANGEtambém. Estes são removidos porque a bandeira -d ignora o%%caracteres especiais e a bandeira -f ignora diferenças no caso.apple %%banana ORANGE Persimmon - Para classificar como no exemplo 4, removendo instâncias duplicadas a menos que capitalizado ou pontuado de forma diferente, digite:Entrando no+0 -d -ffaz o mesmo tipo de classificação que é feito com-d -fno exemplo 3. Então o+0executa outra comparação para distinguir linhas que não são idênticas. Isso evita que a sinalização -u seja removê-las.
Dado ofruitsarquivo mostrado no exemplo 1, o incluído+0distinções%%bananaa partir debananaeORANGEa partir deorange. No entanto, as duas instâncias deapplesão idênticos, portanto, um deles é excluído.
apple %%banana banana ORANGE orange Persimmon - Para especificar o caractere que separa campos, digite:sort -t: +1 vegetablesEsta sequência de comandos classificam ovegetablesarquivo, comparando o texto que segue o primeiro colon em cada linha. Os comandos+1conta o comando sort para ignorar o primeiro campo e para comparar desde o início do segundo campo até o final da linha. Os comandos-t:flag informa o comando sort que colons campos separados. Sevegetablescontém:
Em seguida, com a variável de ambiente LC_ALL, LC_COLLATEou LANG configurada para C, o comando sort exibe:yams:104 turnips:8 potatoes:15 carrots:104 green beans:32 radishes:5 lettuce:15
Observe que os números não estão em ordem numérica. Isso aconteceu quando uma espécie lexicográfica compara cada personagem da esquerda para a direita. Em outras palavras,3vem antes5, assim32vem antes5.carrots:104 yams:104 lettuce:15 potatoes:15 green beans:32 radishes:5 turnips:8 - Para classificar números, digite:Esta sequência de comandos classificam ovegetablesarquivo numericamente no segundo campo. Caso o comandovegetablesarquivo é o mesmo que no exemplo 6, então o comando sort exibe:
radishes:5 turnips:8 lettuce:15 potatoes:15 green beans:32 carrots:104 yams:104 - Para classificar mais de um campo, digite:OUEsta sequência de comandos executa uma classificação numérica no segundo campo (+1 -2 -n). Dentro dessa ordenação, classifica-se o primeiro campo em ordem alfabética inversa (+0 -1 -r). Com a variável de ambiente LC_ALL, LC_COLLATEou LANG configurada para C, a saída se parece com esta:
O comando classia as linhas em ordem numérica. Quando duas linhas têm o mesmo número, elas aparecem em ordem alfabética inversa.radishes:5 turnips:8 potatoes:15 lettuce:15 green beans:32 yams:104 carrots:104 - Para substituir o arquivo original pelo texto sorteado, digite:sort -o vegetables vegetablesEsta sequência de comandos armazena a saída classificada novegetablesarquivo (-o vegetables).
Arquivos
| Item | Descrição |
|---|---|
| /usr/bin/sort | Contém o comando sort . |
| Item | Descrição |
|---|---|
| /var/tmp | Espaço temporário durante o processamento de comandos sort . |
| /usr/tmp | Espaço temporário durante o processamento de comandos sort , se arquivo não puder ser criado em /var/tmp. |
| /tmp | Espaço temporário durante o processamento de comandos sort , se arquivo não puder ser criado em /var/tmp ou /usr/tmp. |