首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何迭代匹配模式的循环并使用awk打印计数

如何迭代匹配模式的循环并使用awk打印计数
EN

Stack Overflow用户
提问于 2022-08-08 12:42:54
回答 2查看 85关注 0票数 1

我有以下的多路径输出。

代码语言:javascript
复制
mig_1 (3624a9370908ba6a5e68a464600014087) dm-11 PURE,FlashArray
size=5.0T features='0' hwhandler='0' wp=rw
`-+- policy='queue-length 0' prio=1 status=active
  |- 0:0:2:3 sdeo 129:0  active ready running
  |- 0:0:3:3 sdep 129:16 active ready running
  |- 1:0:2:3 sdeq 129:32 active ready running
  `- 1:0:3:3 sder 129:48 active ready running
mig_2 (3624a9370908eb6a5f69a4646000140bb) dm-10 PURE,FlashArray
size=7.0T features='0' hwhandler='0' wp=rw
`-+- policy='queue-length 0' prio=1 status=active
  |- 0:0:2:2 sdkg 66:320 active ready running
  |- 0:0:3:2 sdkh 66:336 active ready running
  |- 1:0:2:2 sdki 66:352 active ready running
  `- 1:0:3:2 sdkj 66:368 active ready running

要检查每个LUN存在多少活动路径。如果LUN没有准备好运行/active /它应该减少计数。尝试了下面的方法,但它没有提供所需的结果。它提供了所有的伦的总数,也是大小是不同的线。

代码语言:javascript
复制
 cat multi | awk '/dm-1/ {print $1"\t"$2} ; /^size/ {print $1} ; /active ready running/ {a++} END {print a}'
mig_1   (3624a9370908ba6a5e68a464600014087)
size=5.0T
mig_2   (3624a9370908eb6a5f69a4646000140bb)
size=7.0T
8

预期产出如下:

代码语言:javascript
复制
Disk  #1:  mig_1  (3624a9370908ba6a5e68a464600014087)  size=5.0T  active_paths:4
Disk  #2:  mig_2  (3624a9370908eb6a5f69a4646000140bb)  size=7.0T  active_paths:4

请提供如何实现上述输出的建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-08 12:53:18

对于所显示的示例(仅),请尝试遵循awk代码。在GNU awk中编写和测试,应该可以在任何awk版本中工作。

代码语言:javascript
复制
awk '
/^mig_[0-9]+/{
  if(found && val1 && val2 && count){
    print "Disk  #" ++count2,val1,val2,"active_paths:"count
    count=val1=val2=found=""
  }
  val1=$1 OFS $2
  found=1
  next
}
found && /^size=[0-9]+/{
  val2=$1
  next
}
found && /active ready running/{
  count++
}
END{
  if(found && val1 && val2 && count){
    print "Disk  #" ++count2,val1,val2,"active_paths:"count
  }
}
'   Input_file
票数 2
EN

Stack Overflow用户

发布于 2022-08-10 05:36:48

站在巨人的肩膀上,我的回答是基于@RavinderSingh13的回答。我在评论中指出,除了是伟大的awk代码之外,它不会为没有活动路径的设备打印一行,从而丢失所有路径向下的设备。作为超过5年的存储支持工程师和略多于两年的存储管理员,我第一手地知道,拥有一行"0“活动路径可能是最关键的。因此,我修改了RavinderSingh13的awk来解释这一点。我还剪掉了一些不必要的碎片。

代码语言:javascript
复制
awk '
/^mig_[0-9]+/{
  if(found){
    if(!active){
      active="ALL PATHS DOWN"
    }
    print "Disk  #" ++count,val1,val2,"active_paths:"active
    active=val1=val2=""
  }
  else{
    found=1
  }
  val1=$1 OFS $2
  next
}
/^size=[0-9]+/{
  val2=$1
  next
}
/active ready running/{
  active++
}
END{
  if(!active){
    active="ALL PATHS DOWN"
  }
  print "Disk  #" ++count,val1,val2,"active_paths:"active
}
' mpath.txt

mpath.txt (请注意,我无法访问具有多路径设备的SAN或服务器,更不用说具有非活动/健康路径的SAN或服务器,因此我将输出“失败的错误停止”--不管怎么说,这些任意字符串对我的awk代码修改没有影响-它将在输出中的任何路径行上工作,而这些路径线不是严格的“活动就绪运行”)。

代码语言:javascript
复制
mig_1 (3624a9370908ba6a5e68a464600014087) dm-11 PURE,FlashArray
size=5.0T features='0' hwhandler='0' wp=rw
`-+- policy='queue-length 0' prio=1 status=active
  |- 0:0:2:3 sdeo 129:0  active ready running
  |- 0:0:3:3 sdep 129:16 failed faulty stopped
  |- 1:0:2:3 sdeq 129:32 active ready running
  `- 1:0:3:3 sder 129:48 active ready running
mig_2 (3624a9370908eb6a5f69a4646000140bb) dm-10 PURE,FlashArray
size=7.0T features='0' hwhandler='0' wp=rw
`-+- policy='queue-length 0' prio=1 status=active
  |- 0:0:2:2 sdkg 66:320 failed faulty stopped
  |- 0:0:3:2 sdkh 66:336 failed faulty stopped
  |- 1:0:2:2 sdki 66:352 failed faulty stopped
  `- 1:0:3:2 sdkj 66:368 failed faulty stopped
mig_1 (3624a9370908ba6a5e68a464600014087) dm-11 PURE,FlashArray
size=5.0T features='0' hwhandler='0' wp=rw
`-+- policy='queue-length 0' prio=1 status=active
  |- 0:0:2:3 sdeo 129:0  active ready running
  |- 0:0:3:3 sdep 129:16 active ready running
  |- 1:0:2:3 sdeq 129:32 active ready running
  `- 1:0:3:3 sder 129:48 active ready running
mig_2 (3624a9370908eb6a5f69a4646000140bb) dm-10 PURE,FlashArray
size=7.0T features='0' hwhandler='0' wp=rw
`-+- policy='queue-length 0' prio=1 status=active
  |- 0:0:2:2 sdkg 66:320 active ready running
  |- 0:0:3:2 sdkh 66:336 active ready running
  |- 1:0:2:2 sdki 66:352 active ready running
  `- 1:0:3:2 sdkj 66:368 active ready running

我希望我的修改是受欢迎的,我希望RavinderSingh13得到98%的信贷。

最后产出:

代码语言:javascript
复制
...

Disk  #1 mig_1 (3624a9370908ba6a5e68a464600014087) size=5.0T active_paths:3
Disk  #2 mig_2 (3624a9370908eb6a5f69a4646000140bb) size=7.0T active_paths:ALL PATHS DOWN
Disk  #3 mig_1 (3624a9370908ba6a5e68a464600014087) size=5.0T active_paths:4
Disk  #4 mig_2 (3624a9370908eb6a5f69a4646000140bb) size=7.0T active_paths:4
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73278083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档