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

bash – awk将key = value对解析为变量

发布时间:2020-12-15 18:24:59 所属栏目:安全 来源:网络整理
导读:我有一堆不同类型的文件需要定期查看,它们的共同之处在于这些行有一堆key = value类型的字符串.所以类似于: Version=2 Len=17 Hello Var=Howdy Other 我希望能够直接从awk中引用这些名称…所以类似于: cat some_file | ... | awk '{print Var,$5}' # print
我有一堆不同类型的文件需要定期查看,它们的共同之处在于这些行有一堆key = value类型的字符串.所以类似于:
Version=2 Len=17 Hello Var=Howdy Other

我希望能够直接从awk中引用这些名称…所以类似于:

cat some_file | ... | awk '{print Var,$5}' # prints Howdy Other

我怎么能这样做呢?

你可以得到的最接近的是将每个行的变量解析为关联数组.也就是说,
awk '{ delete vars; for(i = 1; i <= NF; ++i) { n = index($i,"="); if(n) { vars[substr($i,1,n - 1)] = substr($i,n + 1) } } Var = vars["Var"] } { print Var,$5 }'

更可读:

{
  delete vars;                   # clean up previous variable values
  for(i = 1; i <= NF; ++i) {     # walk through fields
    n = index($i,"=");          # search for =
    if(n) {                      # if there is one:

                                 # remember value by name. The reason I use
                                 # substr over split is the possibility of
                                 # something like Var=foo=bar=baz (that will
                                 # be parsed into a variable Var with the
                                 # value "foo=bar=baz" this way).
      vars[substr($i,n + 1)
    }
  }

  # if you know precisely what variable names you expect to get,you can
  # assign to them here:
  Var     = vars["Var"]
  Version = vars["Version"]
  Len     = vars["Len"]
}
{
  print Var,$5                  # then use them in the rest of the code
}

(编辑:李大同)

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

    推荐文章
      热点阅读