首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >格式化来自dmidecode的特定输出

格式化来自dmidecode的特定输出
EN

Stack Overflow用户
提问于 2012-09-03 13:17:45
回答 1查看 1.6K关注 0票数 1

我正在寻找一种方法来格式化来自dmidecode的输出,我找到了下面这篇文章,它恰好满足了我的需求

http://www.experts-exchange.com/Programming/Languages/Scripting/Shell/Q_27770556.html

我从上面的答案中的代码中修改了一些我需要的字段,这显示了awk从dmidecode创建了带引号的csv输出

代码语言:javascript
复制
dmidecode -t 17 | awk -F: '/Size|Locator|Speed|Manufacturer|Serial Number|Part Number/{sub(/^ */,"",$2);s=sprintf("%s,\"%s\"",s,$2)}/^Memory/{print s;s=""}END{print s}' |sed -e 's/,//' | grep -iv "no module" | tr -d ' '

"4096MB","CPU0","DIMM01","1066MHz","Samsung","754C2C33","M393B5273CH0-YH9"

我需要选项卡,没有引号

代码语言:javascript
复制
4096MB  CPU0    DIMM01  1066MHz         Samsung         754C2C33        M393B5273CH0-YH9

我仍然在尝试了解awk,并感谢任何人向我展示适当的修改。

修复了上面的代码,之前粘贴的无效语法

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-03 15:26:42

通过您发布的链接,我将数据保存在一个名为file.txt的文件中。我注意到记录是用空行分隔的。我使用了以下awk代码:

代码语言:javascript
复制
awk 'BEGIN { FS=":"; OFS="\t" } /Size|Locator|Speed|Manufacturer|Serial Number|Part Number/ { gsub(/^[ \t]+/,"",$2); line = (line ? line OFS : "") $2 } /^$/ { print line; line="" }' file.txt

结果:

代码语言:javascript
复制
2048 MB XMM1    Not Specified   1333 MHz    JEDEC ID    8106812F      HMT125U6BFR8C-H9
No Module Installed XMM2    Not Specified   Unknown JEDEC ID        
2048 MB XMM3    Not Specified   1333 MHz    JEDEC ID    7006C12F    HMT125U6BFR8C-H9
No Module Installed XMM4    Not Specified   Unknown JEDEC ID        
4096 kB SYSTEM ROM  Not Specified   Unknown Not Specified   Not Specified   Not Specified

您的命令行现在将如下所示:

代码语言:javascript
复制
dmidecode -t 17 | awk 'BEGIN { FS=":"; OFS="\t" } /Size|Locator|Speed|Manufacturer|Serial Number|Part Number/ { gsub(/^[ \t]+/,"",$2); line = (line ? line OFS : "") $2 } /^$/ { print line; line="" }' | grep -iv "no module"

编辑:

代码语言:javascript
复制
dmidecode -t 17 | awk 'BEGIN { FS=":"; OFS="\t" } /Size|Locator|Speed|Manufacturer|Serial Number|Part Number/ { if ($2 ~ /MB$|MHz$/) { gsub(/[ \t]+/,"",$2) } gsub(/^[ \t]+/,"",$2); line = (line ? line OFS : "") $2 } /^$/ { print line; line="" }' | grep -iv "no module"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12242344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档