我有以下的多路径输出。
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 /它应该减少计数。尝试了下面的方法,但它没有提供所需的结果。它提供了所有的伦的总数,也是大小是不同的线。
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预期产出如下:
Disk #1: mig_1 (3624a9370908ba6a5e68a464600014087) size=5.0T active_paths:4
Disk #2: mig_2 (3624a9370908eb6a5f69a4646000140bb) size=7.0T active_paths:4请提供如何实现上述输出的建议。
发布于 2022-08-08 12:53:18
对于所显示的示例(仅),请尝试遵循awk代码。在GNU awk中编写和测试,应该可以在任何awk版本中工作。
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发布于 2022-08-10 05:36:48
站在巨人的肩膀上,我的回答是基于@RavinderSingh13的回答。我在评论中指出,除了是伟大的awk代码之外,它不会为没有活动路径的设备打印一行,从而丢失所有路径向下的设备。作为超过5年的存储支持工程师和略多于两年的存储管理员,我第一手地知道,拥有一行"0“活动路径可能是最关键的。因此,我修改了RavinderSingh13的awk来解释这一点。我还剪掉了一些不必要的碎片。
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.txtmpath.txt (请注意,我无法访问具有多路径设备的SAN或服务器,更不用说具有非活动/健康路径的SAN或服务器,因此我将输出“失败的错误停止”--不管怎么说,这些任意字符串对我的awk代码修改没有影响-它将在输出中的任何路径行上工作,而这些路径线不是严格的“活动就绪运行”)。
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%的信贷。
最后产出:
...
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:4https://stackoverflow.com/questions/73278083
复制相似问题