gpt4 book ai didi

awk 将变量设置为 if 语句匹配后的行

转载 作者:行者123 更新时间:2023-12-04 18:03:32 28 4
gpt4 key购买 nike

我有以下文字...

BIOS Information
Manufacturer : Dell Inc.
Version : 2.5.2
Release Date : 01/28/2015

Firmware Information
Name : iDRAC7
Version : 2.21.21 (Build 12)

Firmware Information
Name : Lifecycle Controller 2
Version : 2.21.21.21

...它被输送到以下 awk 语句中...
awk '{ if ($1" "$2 == "BIOS Information") var=$1} END { print var }'

在这种情况下,这将输出“BIOS”。
我想查找“BIOS 信息”,然后设置第三个字段,向下两行,因此在这种情况下,“var”将等于“2.5.2”。有没有办法用 awk 做到这一点?

编辑:
我尝试了以下方法:
awk ' BEGIN {
FS="[ \t]*:[ \t]*";
}
NF==1 {
sectname=$0;
}
NF==2 && $1 == "Version" && sectname="BIOS Information" {
bios_version=$2;
}
END {
print bios_version;
}'

这给了我 '2.21.21.21' 上面的文字。这可以修改为给我“BIOS 信息”之后的第一个“版本”吗?

最佳答案

以下脚本可能有点矫枉过正,但在您有多个部分名称和/或字段顺序更改的情况下,它是强大的。

BEGIN {
FS="[ \t]*:[ \t]*";
}
NF==1 {
sectname=$0;
}
NF==2 && $1 == "Version" && sectname=="BIOS Information" {
bios_version=$2;
}
END {
print bios_version;
}

首先,我们设置输入字段分隔符,以便单词不会被分成不同的字段。接下来,我们检查当前行是部分名称还是键值对。如果是段名,设置 sectname到部分名称。如果它是一个键值对并且当前部分名称是“BIOS 信息”并且键是“版本”那么我们设置 bios_version .

关于awk 将变量设置为 if 语句匹配后的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37616569/

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