1

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

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

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

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,并希望有人向我展示适当的修改

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

4

1 回答 1

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"
于 2012-09-03T07:26:42.280 回答