linux - 使用 sed 或 awk 解析多路径输出

标签 linux bash sed awk

我正在尝试为我正在编写的脚本在 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]

看起来像:

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]

** 编辑 好的,所以让这更难,我发现没有 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'

它把大小放在主线上给我一些其他的东西来匹配:

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]

但是,我无法获得以下任何示例来匹配“G[$”(我知道如果有任何 TB 卷,我将需要为 T 添加另一行)并给我正确的输出。

感谢大家在下方的建议 **结束编辑

我知道如何清理间距,所以我会在获得正确的输出后这样做。将开始多路径信息的行都以“LUN”结尾。服务器在每个 LUN 行(sdx 设备)下可以有 1 到 8 个路径。 “()”之前的部分可以是文本(别名),也可以是数字。

最佳答案

一种方式:

script.awk 的内容:

$1 ~ /^([[:digit:]]:){3}[[:digit:]]$/ {
    printf "%s %s\n", line, $0; 
    next;
}

##$1 ~ /temp|redo/ {
$0 ~ /LUN$/ {
    getline l;
    line = $0 " " l;
}

假设 infile 包含问题的内容,运行脚本如下:

awk -f script.awk infile

输出如下:

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]

关于linux - 使用 sed 或 awk 解析多路径输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12080265/

相关文章:

ruby-on-rails - 使用一些参数运行 rails runner

linux - 在 CentOS 8 中从 pgdg 存储库安装 postgresql12-server 后找不到 pg_ctl

macos - PS1 中的什么导致我的 Terminal.app 命令卡在屏幕上?

regex - sed - "{"和 "},"之间的地址空间

android - Bash sed 命令删除 Android 参数中匹配的所有行

linux - 如何将 Linux Centos 6.5 服务器上 Apache Tomcat 上的端口 8080 更改为默认端口?

linux - 在 bash 中使用 sed 查找和替换其后继数字

linux - block 大小的大小限制

linux - bash 如何知道从/usr/lib/git-core/读取自动补全

bash - gnu parallel + sed 编辑 csv 标题和内容