- Gerar link
- Outros aplicativos
Postagem em destaque
- Gerar link
- Outros aplicativos
A exibição de informações na tela durante ou após a execução de um comando ou script é importante para entendermos o que está acontecendo ou depurar um possível erro. Mas para que isso seja útil é necessário a organização desses dados antes de serem retornados ao usuário, senão perderíamos muito tempo só procurando a informação que queremos.
A forma mais eficaz de organizar informações é separando em colunas, onde o elemento de cada linha fica alinhado ao grupo (coluna) a que pertence.
Para essa demonstração escolhi o arquivo '/etc/passwd', onde o sistema armazena as informações dos usuários. Como o conteúdo do arquivo é muito extenso, vou copiar só as dez primeiras linhas, criando um novo arquivo chamado 'info'.
Visualizando.
Note que as informações de cada usuário são separadas por um delimitador ':' (dois-pontos).
Se pegar a primeira linha e separar os campos removendo todos os delimitadores, obteria o seguinte padrão.
Dessa forma, temos uma visão mais clara do arquivo; isso irá nos auxiliar no momento de montar a linha de comando.
Usando o comando 'printf' para criar a formatação das colunas, seguindo a sintaxe:
printf '%TAMs ...' EXPRESSAO...
O valor a ser alocado determina o total de caracteres que uma coluna irá suportar
Valores:
Para que o comando 'printf' interprete as colunas, é necessário remover todos os delimitadores ':' entre os campos, deixando um espaço entre eles; para isso vou utilizar o comando 'cut'.
Testando.
Listei o conteúdo do arquivo, substituindo o delimitador de entrada ':' (dois-pontos) pelo delimitador de saída ' ' (espaço), com isso separamos os campos.
Agora com a linha de comando do 'cut' montada e funcionando, podemos partir para o 'printf', criando os cabeçalhos das tabelas.
O cabeçalho é muito simples, basta seguir os valores de alocação definidos anteriormente para as colunas e aplicar ao título.
Assim, os cabeçalhos ficaram alinhados com as suas respectivas colunas.
Vou montar o pequeno script para que você possa entender o que estou dizendo.
Script: coluna.sh
Executando o script:
As colunas foram criadas com os valores devidamente alinhados e com certeza ficou bem melhor para ler as informações.
E se eu disser que existe uma forma mais simples de fazer isso ?!
Sei que deve estar se perguntando.
-Se tinha algo mais simples, porque optamos pelo mais difícil ?! '@#$%#'
Calma jovem, essa é a beleza do Shell, permitir ao usuário fazer a mesma coisa de formas diferentes.
Sem mais demoras, te apresento o comando 'column' !!!! Nome sugestivo né não ??
O comando column é um utilitário que formata sua entrada em várias colunas, onde as linhas são preenchidas antes das colunas.
Sintaxe: column [-tx] [-c columns] [-s sep] [file ...]
Os parâmetros que iremos utilizar são:
A partir do momento que informamos ao parâmetro '-s' o delimitador ':' (dois-pontos), o comando separou os campos e calculou o tamanho em caracteres para cada coluna de forma automática.
A diferença na exibição das informações, é que o 'printf' imprime os campos alinhados a direita, enquanto o column é alinhado à esquerda.
Essa foi uma simples demonstração de como formatar seu texto em colunas e ao mesmo tempo que seja útil para você.
A forma mais eficaz de organizar informações é separando em colunas, onde o elemento de cada linha fica alinhado ao grupo (coluna) a que pertence.
Para essa demonstração escolhi o arquivo '/etc/passwd', onde o sistema armazena as informações dos usuários. Como o conteúdo do arquivo é muito extenso, vou copiar só as dez primeiras linhas, criando um novo arquivo chamado 'info'.
$ cat /etc/passwd | head -n10 > info
Visualizando.
$ cat info
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
Note que as informações de cada usuário são separadas por um delimitador ':' (dois-pontos).
Se pegar a primeira linha e separar os campos removendo todos os delimitadores, obteria o seguinte padrão.
1º campo | 2º campo | 3º campo | 4º campo | 5º campo |
6º campo | 7º campo |
---|---|---|---|---|---|---|
Usuário | Padrão | UID | GID | Informações | Home | Shell |
root | x | 0 | 0 | root | /root | /bin/bash |
Dessa forma, temos uma visão mais clara do arquivo; isso irá nos auxiliar no momento de montar a linha de comando.
Usando o comando 'printf' para criar a formatação das colunas, seguindo a sintaxe:
printf '%TAMs ...' EXPRESSAO...
%s | Interpretador de string. |
TAM | Espaço a ser alocado para a coluna. |
EXPRESSAO | Uma variável ou constante contendo uma cadeia de caracteres. |
O valor a ser alocado determina o total de caracteres que uma coluna irá suportar
Valores:
Coluna | usuário | padrão | UID | GID | Informações | Home | Shell |
Tamanho | 10 | 1 | 5 | 5 | 18 | 18 | 18 |
Para que o comando 'printf' interprete as colunas, é necessário remover todos os delimitadores ':' entre os campos, deixando um espaço entre eles; para isso vou utilizar o comando 'cut'.
Testando.
$ cut -d':' -f1- --output-delimiter=' ' info
root x 0 0 root /root /bin/bash
daemon x 1 1 daemon /usr/sbin /usr/sbin/nologin
bin x 2 2 bin /bin /usr/sbin/nologin
sys x 3 3 sys /dev /usr/sbin/nologin
sync x 4 65534 sync /bin /bin/sync
games x 5 60 games /usr/games /usr/sbin/nologin
man x 6 12 man /var/cache/man /usr/sbin/nologin
lp x 7 7 lp /var/spool/lpd /usr/sbin/nologin
mail x 8 8 mail /var/mail /usr/sbin/nologin
news x 9 9 news /var/spool/news /usr/sbin/nologin
root x 0 0 root /root /bin/bash
daemon x 1 1 daemon /usr/sbin /usr/sbin/nologin
bin x 2 2 bin /bin /usr/sbin/nologin
sys x 3 3 sys /dev /usr/sbin/nologin
sync x 4 65534 sync /bin /bin/sync
games x 5 60 games /usr/games /usr/sbin/nologin
man x 6 12 man /var/cache/man /usr/sbin/nologin
lp x 7 7 lp /var/spool/lpd /usr/sbin/nologin
mail x 8 8 mail /var/mail /usr/sbin/nologin
news x 9 9 news /var/spool/news /usr/sbin/nologin
Listei o conteúdo do arquivo, substituindo o delimitador de entrada ':' (dois-pontos) pelo delimitador de saída ' ' (espaço), com isso separamos os campos.
Agora com a linha de comando do 'cut' montada e funcionando, podemos partir para o 'printf', criando os cabeçalhos das tabelas.
O cabeçalho é muito simples, basta seguir os valores de alocação definidos anteriormente para as colunas e aplicar ao título.
Assim, os cabeçalhos ficaram alinhados com as suas respectivas colunas.
Vou montar o pequeno script para que você possa entender o que estou dizendo.
Script: coluna.sh
#!/bin/bash
# Arquivo criado
ARQ=./info
# Cabeçalho
printf '%10s %5s %5s %8s %10s %18s %18s\n' 'USUARIO' 'P' 'UID' 'GID' 'INFO' 'HOME' 'SHELL'
# Informações (colunas)
printf '%10s %5s %5s %8s %10s %18s %18s\n' $(cut -d':' -f1- --output-delimiter=' ' $ARQ)
# Arquivo criado
ARQ=./info
# Cabeçalho
printf '%10s %5s %5s %8s %10s %18s %18s\n' 'USUARIO' 'P' 'UID' 'GID' 'INFO' 'HOME' 'SHELL'
# Informações (colunas)
printf '%10s %5s %5s %8s %10s %18s %18s\n' $(cut -d':' -f1- --output-delimiter=' ' $ARQ)
Executando o script:
Saída |
As colunas foram criadas com os valores devidamente alinhados e com certeza ficou bem melhor para ler as informações.
E se eu disser que existe uma forma mais simples de fazer isso ?!
Sei que deve estar se perguntando.
-Se tinha algo mais simples, porque optamos pelo mais difícil ?! '@#$%#'
Calma jovem, essa é a beleza do Shell, permitir ao usuário fazer a mesma coisa de formas diferentes.
Sem mais demoras, te apresento o comando 'column' !!!! Nome sugestivo né não ??
O comando column é um utilitário que formata sua entrada em várias colunas, onde as linhas são preenchidas antes das colunas.
Sintaxe: column [-tx] [-c columns] [-s sep] [file ...]
Os parâmetros que iremos utilizar são:
-s | Especifica o caractere usado como delimitador. |
-t | Determina o total de colunas a serem criadas. |
file | Nome do arquivo a ser tratado. |
Saída |
A partir do momento que informamos ao parâmetro '-s' o delimitador ':' (dois-pontos), o comando separou os campos e calculou o tamanho em caracteres para cada coluna de forma automática.
A diferença na exibição das informações, é que o 'printf' imprime os campos alinhados a direita, enquanto o column é alinhado à esquerda.
Essa foi uma simples demonstração de como formatar seu texto em colunas e ao mesmo tempo que seja útil para você.
- Gerar link
- Outros aplicativos
Comentários
Postar um comentário