如何从多行命令输出中提取指定键值对并关联块名称?
提取分区名称与指定键值对的方法
针对你给出的scontrol show partition类输出格式,要提取每个分区名称与指定键的键值对组合,推荐用以下两种方法:
方法一:使用awk(更直观易维护)
awk适合处理这种分块的文本结构,只需指定目标键即可输出对应结果。比如要提取key4的键值对:
awk -v target_key="key4" ' /^Name=/ { name = substr($0, 6) } /^\s+/ { for (i=1; i<=NF; i++) { split($i, kv, "=") if (kv[1] == target_key) { print name ": " $i } } }' input.txt
如果要提取key3,只需要将target_key="key4"替换为target_key="key3"即可。
原理说明:
- 匹配
Name=开头的行,截取等号后的分区名称保存 - 匹配缩进的键值对行,遍历行内每个键值对字段,拆分键和值,当键与目标键一致时,输出名称+键值对
方法二:使用sed
如果偏好sed,也可以通过多行处理实现需求,比如提取key4:
sed -n ' /^Name=/ { s/Name=// h } /^\s.*key4=/ { s/^\s*// s/.*\(key4=[^ ]*\).*/\1/ G s/\(.*\)\n\(.*\)/\2: \1/ p }' input.txt
原理说明:
- 匹配
Name=行,移除Name=前缀后,将名称存入保持空间 - 匹配包含
key4的缩进行,移除开头空格并提取key4=xxx部分,再取出保持空间的名称,拼接成目标格式输出
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

