加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

如果语句匹配,awk将变量设置为行

发布时间:2020-12-14 01:12:47 所属栏目:Linux 来源:网络整理
导读:我有以下文字…… BIOS InformationManufacturer : Dell Inc.Version : 2.5.2Release Date : 01/28/2015Firmware InformationName : iDRAC7Version : 2.21.21 (Build 12)Firmware InformationName : Lifecycle Controller 2Version : 2.21.21.21 …通过管道
我有以下文字……

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 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;
}'

这给了我’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 Information”,键是“Version”,那么我们设置bios_version.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读