Categories
Linux Tutoriais

Formate automaticamente a saída dos seus comandos Linux em tabelas

Como organizar a saída de comandos no Linux em colunas e linhas arrumadas, para facilitar a visualização dos detalhes.

As tabelas são das formas mais simples de se organizar informações.
Muitos comandos ou sequências de comandos, dados para obter informações sobre o comportamento do hardware ou do software, podem oferecer uma saída de dados um pouco confusa, à primeira vista.
Com o uso do comando grep, contudo, é possível filtrar a parte que interessa das informações, como já ensinei antes.
Mas, quando se precisa obter informações ordenadas, em vez de “filtradas”, o comando column pode ser mais útil.
Veja um exemplo de seu uso, associado ao comando mount.


mount | column -t

sysfs        on  /sys                             type  sysfs            (rw,nosuid,nodev,noexec,relatime)
proc         on  /proc                            type  proc             (rw,nosuid,nodev,noexec,relatime)
udev         on  /dev                             type  devtmpfs         (rw,nosuid,relatime,size=3925308k,nr_inodes=981327,mode=755)
devpts       on  /dev/pts                         type  devpts           (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs        on  /run                             type  tmpfs            (rw,nosuid,noexec,relatime,size=787320k,mode=755)
/dev/sdb1    on  /                                type  btrfs            (rw,relatime,ssd,space_cache,subvolid=5,subvol=/)
/dev/sda1    on  /home                            type  btrfs            (rw,relatime,space_cache,subvolid=5,subvol=/)
binfmt_misc  on  /proc/sys/fs/binfmt_misc         type  binfmt_misc      (rw,relatime)
tmpfs        on  /run/user/119                    type  tmpfs            (rw,nosuid,nodev,relatime,size=787316k,mode=700,uid=119,gid=124)
tmpfs        on  /run/user/1000                   type  tmpfs            (rw,nosuid,nodev,relatime,size=787316k,mode=700,uid=1000,gid=1000)
gvfsd-fuse   on  /run/user/1000/gvfs              type  fuse.gvfsd-fuse  (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
fusectl      on  /sys/fs/fuse/connections         type  fusectl          (rw,relatime)


Experimente também com o ls:


ls -lah | column -t

total       52K
drwxr-xr-x  1    justincase  justincase  350   set  19  10:31  .
drwxr-xr-x  1    justincase  justincase  1,8K  set  25  16:22  ..
drwxr-xr-x  1    justincase  justincase  4,1K  set  19  16:17  Complete-Python-Bootcamp-master
-rw-r--r--  1    justincase  justincase  360   set  19  10:31  dict_bd_enderecos.py
-rw-r--r--  1    justincase  justincase  115   jun  9   16:17  for-colors.sh
-rwxr-xr-x  1    justincase  justincase  8,8K  jun  13  09:10  hello
-rw-r--r--  1    justincase  justincase  29    set  10  13:03  hello.py
-rw-r--r--  1    justincase  justincase  138   jun  16  17:26  helloworld.f95
-rw-r--r--  1    justincase  justincase  340   jun  20  10:51  meups1.sh
-rw-r--r--  1    justincase  justincase  195   jun  9   17:34  mon-logf.sh
-rw-r--r--  1    justincase  justincase  625   jun  13  15:15  pinghosts.sh
drwxr-xr-x  1    justincase  justincase  168   set  6   17:48  PYTHON
-rw-r--r--  1    justincase  justincase  49    jun  9   16:21  sctchange.sh
-rw-r--r--  1    justincase  justincase  128   jun  9   16:40  until-contador.sh
-rw-r--r--  1    justincase  justincase  130   jun  9   16:26  while-contador.sh

O ls tem saídas “tradicionalmente arrumadas”, de forma que o column apenas melhora o aspecto inserindo tabulações nos espaços.

O utilitário column formata o resultado em múltiplas colunas, dando-lhes um aspecto de tabela organizada, com o objetivo de facilitar a leitura.

Seu uso pode ser incorporado permanentemente, com o comando alias.
Veja um exemplo, baseado na página do manual do column:


alias ls="(printf 'Permissões Links Dono Grupo Bytes Mês Dia '; \
printf 'Hora/Ano Arquivo\n_________________________\n'; \
ls -l | sed 1d) | column -t"

Depois disto, experimente rodar o ls:


ls

Permissões                 Links  Dono        Grupo       Bytes  Mês  Dia  Hora/Ano  Arquivo
_________________________
drwxr-xr-x                 1      justincase  justincase  4158   set  19   16:17     Complete-Python-Bootcamp-master
-rw-r--r--                 1      justincase  justincase  360    set  19   10:31     dict_bd_enderecos.py
-rw-r--r--                 1      justincase  justincase  115    jun  9    16:17     for-colors.sh
-rwxr-xr-x                 1      justincase  justincase  9008   jun  13   09:10     hello
-rw-r--r--                 1      justincase  justincase  29     set  10   13:03     hello.py
-rw-r--r--                 1      justincase  justincase  138    jun  16   17:26     helloworld.f95
-rw-r--r--                 1      justincase  justincase  340    jun  20   10:51     meups1.sh
-rw-r--r--                 1      justincase  justincase  195    jun  9    17:34     mon-logf.sh
-rw-r--r--                 1      justincase  justincase  625    jun  13   15:15     pinghosts.sh
drwxr-xr-x                 1      justincase  justincase  168    set  6    17:48     PYTHON
-rw-r--r--                 1      justincase  justincase  49     jun  9    16:21     sctchange.sh
-rw-r--r--                 1      justincase  justincase  128    jun  9    16:40     until-contador.sh
-rw-r--r--                 1      justincase  justincase  130    jun  9    16:26     while-contador.sh

Se quiser tornar este alias permanente, adicione a linha de código ao final do arquivo .bashrc.

O arquivo password tem seus dados separados por ‘:’, porém são muito justos.
Veja como separar isto tudo:


cat /etc/passwd | column -t -s :

Note que foi adicionado um elemento, à linha de comando acima: ‘-s :’
Sua função é indicar que a separação de colunas deve ocorrer sobre o caractere ‘:’.

By Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como "Rick and Morty" e "BoJack Horseman".
Me siga no Twitter e vamos trocar ideias!

2 replies on “Formate automaticamente a saída dos seus comandos Linux em tabelas”

Muito boa a dica. Os comandos funcionam. Mas no meu caso preciso saber para que esta informação é útil no meu dia dia.
A gente precisa aprender um comando e dopis viver ele. Ele precisa ser usado para ficar na memória, não é?
Executo os comandos leio a info e não sei o que fazer com isto. Enfim então estes posts são para usuários avançados. è isto? Abs.

O utilitário pode ser útil dentro de scripts que retornam informações em grande quantidade.
Eventualmente, pode ser usado em operações triviais do dia a dia também.
Pessoalmente, coloco na categoria “coisas que vale a pena saber, mesmo que não vá usar tão cedo”… 😉

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.