gpt4 book ai didi

linux - 重新格式化 Linux 命令输出

转载 作者:太空宇宙 更新时间:2023-11-04 10:25:31 26 4
gpt4 key购买 nike

运行以下命令:

root@kbl1infn1 # hpasmcli -s "show dimm" | egrep "Module|Status"

将产生:

Module #:                     1
Status: Ok
Module #: 3
Status: Ok
Module #: 6
Status: Ok
Module #: 8
Status: Ok
Module #: 1
Status: Ok
Module #: 3
Status: Ok
Module #: 6
Status: Ok
Module #: 8
Status: Ok

如何将输出重新格式化为:

Module: 1  3  6  8 ...
Status: OK OK OK OK

最佳答案

使用 AWK

hpasmcli -s "show dimm" | awk '
/^Module/ { m = m sprintf("%4s", $3) }
/^Status/ { s = s sprintf("%4s", $2) }
END { print "Module:" m "\n" "Status:" s }'

示例输出:

Module:   1   3   6   8   1   3   6   8
Status: Ok Ok Ok Ok Ok Ok Ok Ok

正则表达式/^Module//^Status/后花括号中的 block 在当前记录(行)匹配对应的正则表达式时执行。这些值被收集到 ms 变量中。在 END 处,两个变量都打印到标准输出。

sprintf 函数返回填充到指定宽度 (4) 的字符串。


或者,使用 -F: 选项用冒号分隔记录。但是随后您需要使用 gsub 函数修剪值,例如:

hpasmcli -s "show dimm" | awk -F: '
/^Module/ { gsub(/ +/, "", $2); m = m sprintf("%4s", $2) }
/^Status/ { gsub(/ +/, "", $2); s = s sprintf("%4s", $2) }
END { print "Module:" m "\n" "Status:" s }'

使用 Perl

hpasmcli -s "show dimm" | perl -e '
while (<>) {
push @m, m/:\s*(\S+)$/ if /^Module/;
push @s, m/:\s*(\S+)$/ if /^Status/;
}
print "Module: ", join("", map { sprintf "%4s", $_ } @m), "\n";
print "Status: ", join("", map { sprintf "%4s", $_ } @s), "\n";'

while 循环逐行读取输入。如果一行以“Module”开头,则使用 m/:\s*(\S+)$/ 表达式从该行中提取值。匹配的非空格字符组 (\S+) 被添加到 @m@s 数组。最后,数组项被连接并打印到标准输出。

关于linux - 重新格式化 Linux 命令输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41788511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com