Uni*_*guy 6 linux bash awk sed
我正在尝试解析linux上的多路径输出以查找我正在编写的脚本,并且我无法找到正确的SED或AWK语法来获取它我想要的方式.我一直在浏览各种网站和stackoverflow示例,没有太多运气.
我想找到一种方法:
temp (360a98000572d4d2d5834566c64536b46) dm-4 NETAPP,LUN
[size=20G]
2:0:0:4 sde 8:64 [active][ready]
1:0:0:4 sdm 8:192 [active][ready]
redo (360a98000572d4d2d5834566c646c366c) dm-3 NETAPP,LUN
[size=5.0G]
2:0:0:3 sdd 8:48 [active][ready]
1:0:0:3 sdl 8:176 [active][ready]
Run Code Online (Sandbox Code Playgroud)
看起来像:
temp (360a98000572d4d2d5834566c64536b46) dm-4 NETAPP,LUN [size=20G] 2:0:0:4 sde 8:64 active][ready]
temp (360a98000572d4d2d5834566c64536b46) dm-4 NETAPP,LUN [size=20G] 1:0:0:4 sdm 8:192 [active][ready]
redo (360a98000572d4d2d5834566c646c366c) dm-3 NETAPP,LUN [size=5.0G] 2:0:0:3 sdd 8:48 [active][ready]
redo (360a98000572d4d2d5834566c646c366c) dm-3 NETAPP,LUN [size=5.0G] 1:0:0:3 sdl 8:176 [active][ready]
Run Code Online (Sandbox Code Playgroud)
**编辑好了,所以使这更难,我找到了没有Netapp默认设置的多路径配置.这使得NETAPP,LUN无法保证在线.我开始做的事情:
/sbin/multipath -ll | grep -v "round-robin"| sed 's/\[feat.*//g' | sed ':a; $!N;s/\n\([^\n]*\[size\)/ \1/;ta;P;D'
Run Code Online (Sandbox Code Playgroud)
把大小放在主线上给我一些其他东西来匹配:
360a98000572d4d2d5834664e68323436 dm-6 NETAPP,LUN [size=50G]
\_ 1:0:0:0 sda 8:0 [active][ready]
360a98000572d4d2d5834664e68395951 dm-7 NETAPP,LUN [size=275G]
\_ 1:0:0:7 sdb 8:16 [active][ready]
Run Code Online (Sandbox Code Playgroud)
但是,我无法得到下面的任何一个例子来匹配"G [$"(我知道如果有任何terrabyte卷,我将需要另外一行T)并给我正确的输出.
感谢下面的每个人建议**结束编辑
我知道如何清理间距,所以我会在输出正确之后再这样做.将开始多路径信息的所有行都以"LUN"结尾.每个LUN线(sdx设备)下的服务器可以有1到8个路径."()"之前的部分可以是文本(别名)或数字.
使用 sed:
sed -n '
# if this is header append the size line
/LUN$/{
N;
s/\n/ /;
h # and remember this
};
# if not header then append to header
/LUN \[/!{
G;
s/\(.*\)\n\(.*\)/\2 \1/;
p; #and print
}' input_file
Run Code Online (Sandbox Code Playgroud)
没有评论:
sed -n ' /LUN$/{ N; s/\n/ /; h }; /LUN \[/!{ G; s/\(.*\)\n\(.*\)/\2 \1/; p; }' input_file
Run Code Online (Sandbox Code Playgroud)