我正在尝试创建一个与输出一起使用的命令来检查分区类型和名称。我刚刚发现了一个使用awk
或可能的解决方案sfdisk
?
这是我的基本输出:
root@debian:/home/si# sudo sfdisk -l /dev/sda --quiet | awk '{print $0}'
Périphérique Amorçage Début Fin Secteurs Taille Id Type
/dev/sda1 * 2048 2000895 1998848 976M 83 Linux
/dev/sda2 2000896 86962175 84961280 40,5G 8e LVM Linux
现在让我们过滤 column$1
和$7
$8
root@debian:/home/si# sudo sfdisk -l /dev/sda --quiet | awk '{print $1, $7, $8}'
Périphérique Id Type
/dev/sda1 83 Linux
/dev/sda2 LVM Linux
列上似乎有一个偏移量,因为LVM
值/dev/sda2
应该属于该Type
列,所以$8
如果我是对的,该列。
如何awk
显示列?有没有我想念的过滤器?
在我看来,输出列显示应该像(|
手动添加)
$1 | $2 | $3 | $4 | $5 | $6 | $7 | $8
Périphérique | Amorçage | Début | Fin | Secteurs | Taille | Id | Type
/dev/sda1 |* | 2048 | 2000895 | 1998848 | 976M | 83 | Linux
/dev/sda2 | | 2000896 | 86962175 |84961280 | 40,5G | 8e | LVM Linux
你的图片是错误的。最后一行看起来像这样:
由于您的某些字段包含的空格比其他字段多,并且某些行缺少某些列,因此尝试按字段编号提取数据将很棘手。考虑使用可从中获得的 JSON 输出,
sfdisk
这在很大程度上避免了这些问题:这将输出类似(在我的系统上)的内容:
您会注意到这使用 UUID 来标识分区类型而不是名称,因此您可能需要根据您的目标将其映射回人类可读的内容。
的输出
sfdisk
由物理列而不是逻辑字段格式化。要用 Awk 解析它,请使用 GNU Awk。GNU Awk 支持解析固定列。
这适用于我的安装
sfdisk
:请注意,这些字段没有修剪空格。
我们可以玩的另一个技巧是利用唯一缺少的字段是引导标志
*
。我们可以在它的位置粘贴一些替代字符,例如!
然后让 Awk 使用以下命令重新解析记录$1=$1
:我们不再有虚假的空白,但不利的一面是,类型字段当然会变成字段;如果一件需要它,有多种方法。