我有以下文字......
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
Run Code Online (Sandbox Code Playgroud)
...通过管道输入以下awk声明......
awk '{ if ($1" "$2 == "BIOS Information") var=$1} END { print var }'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这将输出'BIOS'.我想查找'BIOS Information',然后设置第三个字段,两行,所以在这种情况下'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;
}'
Run Code Online (Sandbox Code Playgroud)
这给了我'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;
}
Run Code Online (Sandbox Code Playgroud)
首先,我们设置输入字段分隔符,以便单词不会被分隔到不同的字段中。接下来,我们检查当前行是否是节名称或键值对。如果是节名,则设置sectname为节名。如果它是一个键值对,并且当前部分名称是“BIOS Information”,键是“Version”,那么我们设置bios_version.