Awk 将lsblk输出格式化为特定格式

Awk 将lsblk输出格式化为特定格式,awk,formatting,Awk,Formatting,我正在寻找一种以特定格式显示lsblk输出的方法。 我试着用这个: lsblk -n -l -o NAME,FSTYPE,SIZE,TYPE,MOUNTPOINT 我需要在下面转换此格式: sda 931.5G disk sda1 ext4 923.8G part / sda2 1K part sda5 swap 7.8G part [SWAP] 请注意,当没有文件系统或装入点

我正在寻找一种以特定格式显示lsblk输出的方法。 我试着用这个:

lsblk -n -l -o NAME,FSTYPE,SIZE,TYPE,MOUNTPOINT
我需要在下面转换此格式:

sda                 931.5G disk
sda1         ext4   923.8G part /
sda2                    1K part 
sda5         swap     7.8G part [SWAP]
请注意,当没有文件系统或装入点时,有必要忽略空列

device:sda
size:931.5G
type:disk
device:sda1
filesystem:ext4
size:923.8G
type:part
mountpoint:/
device:sda2
size:1K
type:part
device:sda5
filesystem:swap
size:7.8G
type:part
mountpoint:[SWAP]
到目前为止,我尝试了以下命令:

lsblk -n -l -o NAME,TYPE,SIZE,MOUNTPOINT,FSTYPE | awk '{print $1":"$2":"$3":"$4":"$5}'
GNU awk用于:

$cat tst.awk
开始{
拆分(“设备文件系统大小类型装入点”,标记)
FIELDWIDTHS=“12 7 5*”
OFS=“:”
}
{

对于(i=1;我为初学者做以下操作:
lsblk-n-l-o名称、类型、大小、装入点、FSTYPE | awk'{print$1”\n“$2”\n“$3”\n“$4”\n“$5”\n----”}
。好的,非常感谢您的帮助。代码片段在这里100%工作。
$ cat tst.awk
BEGIN {
    split("device filesystem size type mountpoint",tags)
    FIELDWIDTHS = "12 7 7 5 *"
    OFS = ":"
}
{
    for (i=1; i<=NF; i++) {
        gsub(/^\s+|\s+$/,"",$i)
        if ( $i != "" ) {
            print tags[i], $i
        }
    }
}

$ awk -f tst.awk file
device:sda
size:931.5G
type:disk
device:sda1
filesystem:ext4
size:923.8G
type:part
mountpoint:/
device:sda2
size:1K
type:part
device:sda5
filesystem:swap
size:7.8G
type:part
mountpoint:[SWAP]