Imprime apenas algumas colunas enquanto mantém o espaço em branco

1

Eu tenho um código que imprime colunas selecionadas da saída de lsblk . No entanto, o espaçamento no resultado dificulta a leitura. Existe alguma maneira de fazer isso, mantendo o espaço em branco?

echo "'sudo lsblk | awk -F ' ' '{print $1 "  " $4 "  " $6 "  " $7}''"

saída:

NAME  SIZE  TYPE  MOUNTPOINT
sda  238.5G  disk
├─sda5  68.6G  part  /
├─sda6  7.8G  part  [SWAP]
└─sda8  1000M  part
    
por Linuxrox 17.11.2017 / 04:53

3 respostas

2

Um método é usar printf e atribuir larguras de coluna:

lsblk | awk '{printf "%-8s %8s %5s %s\n",$1,$4,$6,$7}'

Você pode ajustar livremente as larguras das colunas na declaração printf para atender às suas necessidades.

Exemplo:

$ lsblk | awk '{printf "%-8s %8s %5s %s\n",$1,$4,$6,$7}'
NAME         SIZE  TYPE MOUNTPOINT
sda        500.0G  disk 
├─sda1       100M  part /boot
├─sda2      28.6G  part /

Aparte

Considere o formulário conforme mostrado na pergunta:

echo "'cmd1 | cmd2'"

versus o formulário:

cmd1 | cmd2

Embora ambos os formulários sejam semelhantes, as diferenças sutis entre esses dois são discutidas em profundidade aqui . Normalmente, o formulário posterior fornece menos surpresas.

    
por 17.11.2017 / 05:07
2

Aqui, você pode dizer a lsblk para gerar as colunas desejadas em primeiro lugar:

$ lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
NAME                 SIZE TYPE MOUNTPOINT
sda                465.8G disk
├─sda1                 1G part
└─sda2             464.8G part
  ├─VG_XY-debian64    40G lvm  /
  ├─VG_XY-swap        16G lvm  [SWAP]
  └─VG_XY-home       300G lvm  /home
sr0                 1024M rom
    
por 17.11.2017 / 10:04
0

@ A resposta de John1024 e o comentário de @ steeldriver são soluções perfeitas.

Como alternativa, corrija a saída obtida anteriormente

...your_command | column -t
    
por 17.11.2017 / 09:53