Estações de trabalho on-line OnWorks Linux e Windows

Logotipo

Hospedagem online grátis para estações de trabalho

<Anterior | Conteúdo | Próxima>

tipo

O tipo programa classifica o conteúdo da entrada padrão, ou um ou mais arquivos especificados na linha de comando, e envia os resultados para a saída padrão. Usando a mesma técnica que usamos com gato, podemos demonstrar o processamento da entrada padrão diretamente do teclado:



[me @ linuxbox ~] $ sort> foo.txt

cba

[me @ linuxbox ~] $ gato foo.txt

abc

[me @ linuxbox ~] $ sort> foo.txt

cba

[me @ linuxbox ~] $ gato foo.txt

abc


Após inserir o comando, digitamos as letras “c”, “b” e “a”, seguidas mais uma vez por Ctrl-d para indicar o fim do arquivo. Em seguida, visualizamos o arquivo resultante e vemos que as linhas agora aparecem em ordem de classificação.

Como tipo pode aceitar vários arquivos na linha de comando como argumentos, é possível fundir vários arquivos em um único todo classificado. Por exemplo, se tivéssemos três arquivos de texto e quiséssemos combiná-los em um único arquivo classificado, poderíamos fazer algo assim:



classificar arquivo1.txt arquivo2.txt arquivo3.txt> final_sorted_list.txt

classificar arquivo1.txt arquivo2.txt arquivo3.txt> final_sorted_list.txt


sort tem várias opções interessantes. Aqui está uma lista parcial:


Tabela 20-1: Opções de classificação comuns


Opção

Opção Longa

Descrição

-b

--ignore-Lead-blanks

Por padrão, a classificação é realizada em

toda a linha, começando com o

primeiro personagem na linha. Esse

opção faz com que a classificação ignore

espaços principais em linhas e

calcula a classificação com base no primeiro

caractere não-espaço em branco no

linha.

-f

--ignorar caso

Torna a classificação sem distinção entre maiúsculas e minúsculas.


-n

--classificação numérica

Executa a classificação com base na avaliação numérica de uma string. Usar esta opção permite que a classificação seja executada em valores numéricos em vez de valores alfabéticos.

-r

--marcha ré

Classifique na ordem inversa. Os resultados estão em

descendente em vez de ascendente

ordem.

-k

--key =field1[,field2]

Classifique com base em um campo-chave localizado

da field1 para field2 em vez de

linha inteira. Veja a discussão abaixo.

-m

--mesclar

Trate cada argumento como o nome

de um arquivo pré-classificado. Mesclar vários

arquivos em um único resultado classificado

sem realizar nenhum adicional

Ordenação.

-o

--output =lima

Enviar saída classificada para lima em vez

do que a saída padrão.

-t

--field-separator =carbonizar

Defina o separador de campos

personagem. Por padrão, os campos são

separados por espaços ou tabulações.


Embora a maioria das opções acima sejam autoexplicativas, algumas não são. Primeiro, vamos olhar para o -n opção, usada para classificação numérica. Com esta opção, é possível classificar os valores com base em valores numéricos. Podemos demonstrar isso classificando os resultados do du comando para determinar os maiores usuários de espaço em disco. Normalmente, o du comando lista os resultados de um resumo na ordem do nome do caminho:



[me @ linuxbox ~] $ du -s / usr / share / * | cabeça

252 / usr / share / aclocal

96 / usr / share / acpi-support

8 / usr / share / adduser

196 / usr / share / alacarte

344 / usr / share / alsa

8 / usr / share / alsa-base 12488 / usr / share / anthy

8 / usr / share / apmd

21440 / usr / share / app-install

48 / usr / share / application-registry

[me @ linuxbox ~] $ du -s / usr / share / * | cabeça

252 / usr / share / aclocal

96 / usr / share / acpi-support

8 / usr / share / adduser

196 / usr / share / alacarte

344 / usr / share / alsa

8 / usr / share / alsa-base 12488 / usr / share / anthy

8 / usr / share / apmd

21440 / usr / share / app-install

48 / usr / share / application-registry


Neste exemplo, canalizamos os resultados para cabeça para limitar os resultados às primeiras dez linhas. Podemos produzir uma lista classificada numericamente para mostrar os dez maiores consumidores de espaço desta forma:



[me @ linuxbox ~] $ du -s / usr / share / * | sort -nr | cabeça

509940 / usr / share / locale-langpack

242660 / usr / share / doc

197560 / usr / share / fonts

179144 / usr / share / gnome

146764 / usr / share / myspell

144304 / usr / share / gimp

135880 / usr / share / dict

76508 / usr / share / icons

68072 / usr / share / apps

62844 / usr / share / foomatic

[me @ linuxbox ~] $ du -s / usr / share / * | sort -nr | cabeça

509940 / usr / share / locale-langpack

242660 / usr / share / doc

197560 / usr / share / fonts

179144 / usr / share / gnome

146764 / usr / share / myspell

144304 / usr / share / gimp

135880 / usr / share / dict

76508 / usr / share / icons

68072 / usr / share / apps

62844 / usr / share / foomatic


Ao utilizar a blockchain da -nº opções, produzimos uma classificação numérica reversa, com os maiores valores aparecendo primeiro nos resultados. Essa classificação funciona porque os valores numéricos ocorrem no início de cada linha. Mas e se quisermos classificar uma lista com base em algum valor encontrado na linha? Por exemplo, os resultados de um ls -l:


imagem

[me @ linuxbox ~] $ ls -l / usr / bin | cabeça

152948 total


-rwxr-xr-x

1

raiz

raiz

34824

2016-04-04

02:42

[

-rwxr-xr-x

1

raiz

raiz

101556

2007-11-27

06:08

a2d

-rwxr-xr-x

1

raiz

raiz

13036

2016-02-27

08:22

conectar

-rwxr-xr-x

1

raiz

raiz

10552

2007-08-15

10:34

acpi

-rwxr-xr-x

1

raiz

raiz

3800

2016-04-14

03:51

acpi_fakekey

-rwxr-xr-x

1

raiz

raiz

7536

2016-04-19

00:19

acpi_listen

-rwxr-xr-x

1

raiz

raiz

3576

2016-04-29

07:57

adicionar parte

-rwxr-xr-x

1

raiz

raiz

20808

2016-01-03

18:02

addr2line

-rwxr-xr-x

1

raiz

raiz

489704

2016-10-09

17:02

adept_batch


Ignorando, por enquanto, que ls pode classificar seus resultados por tamanho, poderíamos usar tipo para classificar esta lista por tamanho de arquivo, também:


imagem

[me @ linuxbox ~] $ ls -l / usr / bin | sort -nr -k 5 | cabeça


-rwxr-xr-x

1

raiz

raiz

8234216

2016-04-07

17:42

inkscape

-rwxr-xr-x

1

raiz

raiz

8222692

2016-04-07

17:42

vista de tinta

-rwxr-xr-x

1

raiz

raiz

3746508

2016-03-07

23:45

gimp-2.4

-rwxr-xr-x

1

raiz

raiz

3654020

2016-08-26

16:16

quanta

-rwxr-xr-x

1

raiz

raiz

2928760

2016-09-10

14:31

gdbtui

-rwxr-xr-x

1

raiz

raiz

2928756

2016-09-10

14:31

gdb

-rwxr-xr-x

1

raiz

raiz

2602236

2016-10-10

12:56

líquido


-rwxr-xr-x

1

raiz

raiz

2304684

2016-10-10

12:56

clienterpc

-rwxr-xr-x

1

raiz

raiz

2241832

2016-04-04

05:56

aptidão

-rwxr-xr-x

1

raiz

raiz

2202476

2016-10-10

12:56

smbcacls


Muitos usos de tipo envolvem o processamento de dados tabulares, como os resultados do ls comando acima. Se aplicarmos a terminologia de banco de dados à tabela acima, diríamos que cada linha é um registro e que cada registro consiste em vários Campos, como os atributos do arquivo, contagem de links, nome do arquivo, tamanho do arquivo e assim por diante. tipo é capaz de processar campos individuais. Em termos de banco de dados, podemos especificar um ou mais campos-chave para usar como chaves de classificação. No exemplo acima, especificamos o n e r opções para realizar uma classificação numérica reversa e especificar -k 5 para fazer vídeos tipo use o quinto campo como a chave de classificação.

O k opção é muito interessante e tem muitos recursos, mas primeiro precisamos falar sobre como tipo define campos. Vamos considerar um arquivo de texto muito simples que consiste em uma única linha contendo o nome do autor:



William Shotts

William Shotts


Por padrão, o tipo vê esta linha como tendo dois campos. O primeiro campo contém os caracteres:

"William"

e o segundo campo contém os caracteres:

“Shotts”

o que significa que os caracteres de espaço em branco (espaços e tabulações) são usados ​​como delimitadores entre os campos e que os delimitadores são incluídos no campo quando a classificação é executada.

Olhando novamente para uma linha de nosso ls saída, podemos ver que uma linha contém oito campos e que o quinto campo é o tamanho do arquivo:



-rwxr-xr-x 1 raiz raiz 8234216 2016/04/07 17:42 inkscape

-rwxr-xr-x 1 raiz raiz 8234216 2016/04/07 17:42 inkscape


Para nossa próxima série de experimentos, vamos considerar o seguinte arquivo contendo o histórico de três distribuições populares do Linux lançadas de 2006 a 2008. Cada linha no arquivo tem três campos: o nome da distribuição, número da versão e data de lançamento em MM / DD Formato / AAAA:


SUSE

10.2

12/07/2006

Fedora

10

11/25/2008

SUSE

11.0

06/19/2008

Ubuntu

8.04

04/24/2008

Fedora

8

11/08/2007

SUSE

10.3

10/04/2007

Ubuntu

6.10

10/26/2006

Fedora

7

05/31/2007

Ubuntu

7.10

10/18/2007

Ubuntu

7.04

04/19/2007

SUSE

10.1

05/11/2006

Fedora

6

10/24/2006

Fedora

9

05/13/2008

Ubuntu

6.06

06/01/2006

Ubuntu

8.10

10/30/2008

Fedora

5

03/20/2006


Usando um editor de texto (talvez vitalidade), inseriremos esses dados e nomearemos o arquivo resultante distros.txt.

A seguir, tentaremos classificar o arquivo e observar os resultados:



[me @ linuxbox

~] $

classificar distros.txt

Fedora 10

11/25/2008

Fedora 5

03/20/2006

Fedora 6

10/24/2006

Fedora 7

05/31/2007

Fedora 8

11/08/2007

Fedora 9

05/13/2008

SUS 10.1

05/11/2006

SUS 10.2

12/07/2006

SUS 10.3

10/04/2007

SUS 11.0

06/19/2008

Ubuntu 6.06

06/01/2006

Ubuntu 6.10

10/26/2006

Ubuntu 7.04

04/19/2007

Ubuntu 7.10

10/18/2007

Ubuntu 8.04

04/24/2008

Ubuntu 8.10

10/30/2008


Bem, na maior parte funcionou. O problema ocorre na classificação dos números de versão do Fedora. Visto que um “1” vem antes de um “5” no conjunto de caracteres, a versão “10” termina no topo enquanto a versão “9” cai para baixo.

Para corrigir esse problema, teremos que classificar em várias chaves. Queremos realizar uma classificação alfabética no primeiro campo e, em seguida, uma classificação numérica no segundo campo. tipo permite


múltiplas instâncias do -k opção para que várias chaves de classificação possam ser especificadas. Na verdade, uma chave pode incluir uma variedade de campos. Se nenhum intervalo for especificado (como foi o caso com nossos exemplos anteriores), tipo usa uma chave que começa com o campo especificado e se estende até o final da linha. Esta é a sintaxe para nossa classificação de várias chaves:



[me @ linuxbox

~] $

sort --key = 1,1 --key = 2n distros.txt

Fedora 5

03/20/2006

Fedora 6

10/24/2006

Fedora 7

05/31/2007

Fedora 8

11/08/2007

Fedora 9

05/13/2008

Fedora 10

11/25/2008

SUS 10.1

05/11/2006

SUS 10.2

12/07/2006

SUS 10.3

10/04/2007

SUS 11.0

06/19/2008

Ubuntu 6.06

06/01/2006

Ubuntu 6.10

10/26/2006

Ubuntu 7.04

04/19/2007

Ubuntu 7.10

10/18/2007

Ubuntu 8.04

04/24/2008

Ubuntu 8.10

10/30/2008


Embora tenhamos usado a forma longa da opção para maior clareza, -k 1,1 -k 2n seria exatamente equivalente. Na primeira instância da opção de chave, especificamos um intervalo de campos a serem incluídos na primeira chave. Como queríamos limitar a classificação apenas ao primeiro campo, especificamos 1,1 que significa "começar no campo um e terminar no campo um". Na segunda instância, especificamos 2n, o que significa que o campo 2 é a chave de classificação e que a classificação deve ser numérica. Uma letra de opção pode ser incluída no final de um especificador de chave para indicar o tipo de classificação a ser executada. Essas letras de opção são iguais às opções globais para o tipo programa: b (ignore os espaços em branco), n (classificação numérica), r (classificação reversa) e assim por diante.

O terceiro campo em nossa lista contém uma data em um formato inconveniente para classificação. Em computadores, as datas são geralmente formatadas na ordem AAAA-MM-DD para facilitar a classificação cronológica, mas o nosso está no formato americano de MM / DD / AAAA. Como podemos classificar essa lista em ordem cronológica?

Felizmente, tipo fornece um caminho. A opção principal permite a especificação de compensações dentro dos campos, para que possamos definir as chaves dentro dos campos:



[me @ linuxbox ~] $ classificar -k 3.7nbr -k 3.1nbr -k 3.4nbr distros.txt

Fedora 10 11/25/2008

Ubuntu 8.10 10/30/2008

[me @ linuxbox ~] $ classificar -k 3.7nbr -k 3.1nbr -k 3.4nbr distros.txt

Fedora 10 11/25/2008

Ubuntu 8.10 10/30/2008


SUSE

11.0

06/19/2008

Fedora

9

05/13/2008

Ubuntu

8.04

04/24/2008

Fedora

8

11/08/2007

Ubuntu

7.10

10/18/2007

SUSE

10.3

10/04/2007

Fedora

7

05/31/2007

Ubuntu

7.04

04/19/2007

SUSE

10.2

12/07/2006

Ubuntu

6.10

10/26/2006

Fedora

6

10/24/2006

Ubuntu

6.06

06/01/2006

SUSE

10.1

05/11/2006

Fedora

5

03/20/2006


Especificando -k 3.7 nós instruímos tipo para usar uma chave de classificação que começa no sétimo caractere dentro do terceiro campo, que corresponde ao início do ano. Da mesma forma, especificamos -k 3.1 e -k 3.4 para isolar as partes do mês e do dia da data. Nós também adicionamos o n e r opções para obter uma classificação numérica reversa. o b opção está incluída para suprimir os espaços iniciais (cujos números variam de linha para linha, afetando assim o resultado da classificação) no campo de data.

Alguns arquivos não usam tabulações e espaços como delimitadores de campo; por exemplo, o / Etc / passwd

arquivo:



[me @ linuxbox ~] $ head / etc / passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh

[me @ linuxbox ~] $ head / etc / passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh


Os campos neste arquivo são delimitados por dois pontos (:), então como classificaríamos esse arquivo usando um campo-chave? tipo fornece o -t opção para definir o caractere separador de campo. Para classificar o passwd arquivo no sétimo campo (o shell padrão da conta), poderíamos fazer isso:


[me @ linuxbox ~] $ sort -t ':' -k 7 / etc / passwd | cabeça

eu: x: 1001: 1001: Eu ...: / home / me: / bin / bash

[me @ linuxbox ~] $ sort -t ':' -k 7 / etc / passwd | cabeça

eu: x: 1001: 1001: Eu ...: / home / me: / bin / bash


root: x: 0: 0: root: / root: / bin / bash dhcp: x: 101: 102 :: / inexistente: / bin / false

gdm: x: 106: 114: Gnome Display Manager: / var / lib / gdm: / bin / false hplip: x: 104: 7: usuário do sistema HPLIP ,,,: / var / run / hplip: / bin / false klog : x: 103: 104 :: / home / klog: / bin / false messagebus: x: 108: 119 :: / var / run / dbus: / bin / false polkituser: x: 110: 122: PolicyKit ,,,: / var / run / PolicyKit: / bin / false pulso: x: 107: 116: daemon PulseAudio ,,,: / var / run / pulse: / bin / false

root: x: 0: 0: root: / root: / bin / bash dhcp: x: 101: 102 :: / inexistente: / bin / false

gdm: x: 106: 114: Gnome Display Manager: / var / lib / gdm: / bin / false hplip: x: 104: 7: usuário do sistema HPLIP ,,,: / var / run / hplip: / bin / false klog : x: 103: 104 :: / home / klog: / bin / false messagebus: x: 108: 119 :: / var / run / dbus: / bin / false polkituser: x: 110: 122: PolicyKit ,,,: / var / run / PolicyKit: / bin / false pulso: x: 107: 116: daemon PulseAudio ,,,: / var / run / pulse: / bin / false


Ao especificar o caractere de dois pontos como separador de campo, podemos classificar no sétimo campo.


Top OS Cloud Computing na OnWorks: