仅打印某些列,同时保留空白

仅打印某些列,同时保留空白

我有一些代码可以从 的输出中打印选择的列lsblk。然而,结果中的空格使得阅读变得困难。有没有办法在保持空白的同时做到这一点?

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

输出:

NAME  SIZE  TYPE  MOUNTPOINT
sda  238.5G  disk
├─sda5  68.6G  part  /
├─sda6  7.8G  part  [SWAP]
└─sda8  1000M  part

答案1

一种方法是自己使用printf和分配列宽:

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

您可以自由调整报表中的列宽printf以满足您的需要。

例子:

$ 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 /

在旁边

考虑问题中所示的形式:

echo "`cmd1 | cmd2`"

与形式:

cmd1 | cmd2

虽然两种形式相似,但深入讨论了这两种形式之间的细微差别这里。通常,后一种形式提供的惊喜较少。

答案2

在这里,您可以告诉lsblk首先输出您想要的列:

$ 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

答案3

@John1024 的回答和@steeldriver 的评论是完美的解决方案。

或者修复之前获得的输出

...your_command | column -t

相关内容