我正在寻找一种方法来格式化来自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,并感谢任何人向我展示适当的修改。
修复了上面的代码,之前粘贴的无效语法
发布于 2012-09-03 15:26:42
通过您发布的链接,我将数据保存在一个名为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"https://stackoverflow.com/questions/12242344
复制相似问题