对齐先前命令输出中的名称/值对

对齐先前命令输出中的名称/值对

hostnamectl命令输出一些格式良好的信息,其中包括您的主机名,但它不包括完全限定的域名 (FQDN),如hostname -f.

作为了解更多有关控制 bash 输出格式的方法,我想将这两个命令组合成一个命令,其中第二个命令遵循第一个命令的输出对齐方式。

hostnamectl ; fqdn=$(hostname -f) ; echo -e "\t\tFQDN:\t${fqdn}"

但请注意,我无法FQDN:与第一个子命令的输出保持一致。

是否存在一个命令允许我在第一个输出的对齐基础上格式化第二个输出而无需编写脚本?我怀疑不是,但我想我会问。

答案1

如果您对静态设置对齐方式感到满意,那么您可以执行以下操作:

hostnamectl ; fqdn=$(hostname -f) ; printf "%18s: %s\n" "FQDN" "${fqdn}"

说明%18s符将该printf字符串打印在 18 个字符宽的字段上,右对齐。 (%-18s将左对齐。)

您还可以使用 awk 重新调整所有输出:

(hostnamectl ; fqdn=$(hostname -f) ; echo "FQDN: ${fqdn}") |
    awk -F: '{printf "%20s:%s\n", $1, $2}'

(假设:每行只有一个)

:或者,让 awk 脚本检查第一行上的位置并将所有内容与该位置对齐:

... | awk -F: 'NR == 1 {w = index($0, ":")} {printf "%*s:%s\n", w, $1, $2}'

(使用工具检查 的输出hostnamectl,然后提供打印 FQDN 的冒号位置,同时将输出发送到终端将需要一些混乱的重定向地狱。这样就容易多了。)

相关内容