如何拆分各内存条输出信息并移除空插槽及Unknown内容?
解决dmidecode内存信息过滤与分组问题
直接用这个改进后的awk命令就能实现你要的效果:
dmidecode -t memory | awk ' /^\tForm Factor/ { if (current_slot && slot_has_data) { print "" } i++ current_slot = "Memory " i slot_has_data = 0 # 跳过空插槽 if ($NF == "Empty") { current_slot = "" next } print current_slot } current_slot != "" && /^\t(Size|Speed|Type)/ { # 过滤Unknown和空值 if ($NF != "Unknown" && $NF != "") { print " " $0 slot_has_data = 1 } } '
命令逻辑拆解:
- 当匹配到
Form Factor行时:- 如果上一个插槽有有效数据,先输出空行分隔不同内存条
- 递增计数器生成
Memory X分组名 - 检查如果是
Empty插槽,直接跳过不创建分组
- 只对已创建的有效分组(非空插槽),匹配
Size/Speed/Type这些关键信息行:- 过滤掉值为
Unknown或空的无效行 - 保留的有效行前面加两个空格缩进,和分组名区分开
- 标记该插槽有有效数据,方便后续分隔不同分组
- 过滤掉值为
如果需要显示更多字段(比如厂商、型号),只需修改第二个正则里的字段列表,比如改成/^\t(Size|Speed|Type|Manufacturer|Part Number)/即可。
内容的提问来源于stack exchange,提问作者Anna R
相关产品推荐
相关产品推荐

