格式化dmidecode的特定输出

时间:2012-09-03 05:17:45

标签: awk

我正在寻找一种以特定方式格式化dmidecode输出的方法,我发现以下文章就是我需要的东西

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

我在上面的答案中修改了我需要的一些字段,这显示awk使用引号创建csv输出,来自dmidecode

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"

我需要标签,没有引号

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

我仍然试图让我的头围绕着awk,并希望有人向我展示适当的修改

修复了我上面的代码,以前粘贴的非工作语法

1 个答案:

答案 0 :(得分:1)

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

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

结果:

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

您的命令行现在看起来像这样:

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"

修改

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"