Bash sed awk,从/proc/cpuinfo和/proc/meminfo格式化CPU/Mem信息

Bash sed awk,从/proc/cpuinfo和/proc/meminfo格式化CPU/Mem信息,bash,awk,sed,grep,cpu,Bash,Awk,Sed,Grep,Cpu,我试图解决的问题是生成可移植的输出,我可以在我们环境中的所有服务器上显示,以便在登录时使用所有CentOS/Red Hat系统上的通用信息显示基本信息。我想从/proc/cpuinfo和/proc/meminfo(或免费-m-h)中获取信息;“为什么不只是“yum安装一些很棒的工具””?“并不理想,因为所有这些信息都可以在/proc中免费获得。我知道,对于sed/awk专家来说,这类事情通常是一个非常简单的技巧(我不知道如何处理这个问题) 以我有限的sed/awk知识) 我想在一行中提取如下内容

我试图解决的问题是生成可移植的输出,我可以在我们环境中的所有服务器上显示,以便在登录时使用所有CentOS/Red Hat系统上的通用信息显示基本信息。我想从
/proc/cpuinfo
/proc/meminfo
(或
免费-m-h
)中获取信息;“为什么不只是“
yum安装一些很棒的工具”
”?“并不理想,因为所有这些信息都可以在
/proc
中免费获得。我知道,对于sed/awk专家来说,这类事情通常是一个非常简单的技巧(我不知道如何处理这个问题) 以我有限的sed/awk知识)

我想在一行中提取如下内容:

<model name>, <cpu MHz> MHz, <cpu cores> cores, <detect "vmx" (Intel-VT) or "svm" (AMD-V support)>
我还想将此信息与
/proc/meminfo
free-mh
的信息结合起来,以便:

"AMD Athlon(tm) II Neo N36L Dual-Core Processor, 1300 MHz, 2 cores, 4.7 GB Memory (1.8 GB Free), SVM-Virtualization"
我花了一些时间搜索方法,但运气不好,这可能是一个有趣的通用问题,因为它涉及到获取表的格式,其中包含大量信息,并根据需要提取,因此有一些通用应用程序

$free-m-h

              total        used        free      shared  buff/cache   available
Mem:          4.5Gi       1.2Gi       1.8Gi        77Mi       1.6Gi       3.0Gi
Swap:         4.8Gi          0B       4.8Gi
$cat/proc/cpuinfo

processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 16
model           : 6
model name      : AMD Athlon(tm) II Neo N36L Dual-Core Processor
stepping        : 3
microcode       : 0x10000c8
cpu MHz         : 1300.000
cache size      : 1024 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 5
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a 3dnowprefetch osvw ibs skinit wdt nodeid_msr hw_pstate vmmcall npt lbrv svm_lock nrip_save
bugs            : tlb_mmatch apic_c1e fxsave_leak sysret_ss_attrs null_seg amd_e400 spectre_v1 spectre_v2
bogomips        : 2595.59
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate
MemTotal:        4771304 kB
MemFree:         1862372 kB
MemAvailable:    3195768 kB
Buffers:            2628 kB
Cached:          1542788 kB
SwapCached:            0 kB
Active:          1534572 kB
Inactive:         909316 kB
Active(anon):     917792 kB
Inactive(anon):    62468 kB
Active(file):     616780 kB
Inactive(file):   846848 kB
Unevictable:        8384 kB
Mlocked:               0 kB
SwapTotal:       5070844 kB
SwapFree:        5070844 kB
Dirty:                20 kB
Writeback:             0 kB
AnonPages:        881304 kB
Mapped:           395420 kB
Shmem:             79776 kB
KReclaimable:     152892 kB
Slab:             295508 kB
SReclaimable:     152892 kB
SUnreclaim:       142616 kB
KernelStack:        9328 kB
PageTables:        45156 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     7456496 kB
Committed_AS:    5260708 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
Percpu:             2864 kB
HardwareCorrupted:     0 kB
AnonHugePages:    417792 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      314944 kB
DirectMap2M:     4796416 kB
DirectMap1G:           0 kB
$cat/proc/meminfo

processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 16
model           : 6
model name      : AMD Athlon(tm) II Neo N36L Dual-Core Processor
stepping        : 3
microcode       : 0x10000c8
cpu MHz         : 1300.000
cache size      : 1024 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 5
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a 3dnowprefetch osvw ibs skinit wdt nodeid_msr hw_pstate vmmcall npt lbrv svm_lock nrip_save
bugs            : tlb_mmatch apic_c1e fxsave_leak sysret_ss_attrs null_seg amd_e400 spectre_v1 spectre_v2
bogomips        : 2595.59
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate
MemTotal:        4771304 kB
MemFree:         1862372 kB
MemAvailable:    3195768 kB
Buffers:            2628 kB
Cached:          1542788 kB
SwapCached:            0 kB
Active:          1534572 kB
Inactive:         909316 kB
Active(anon):     917792 kB
Inactive(anon):    62468 kB
Active(file):     616780 kB
Inactive(file):   846848 kB
Unevictable:        8384 kB
Mlocked:               0 kB
SwapTotal:       5070844 kB
SwapFree:        5070844 kB
Dirty:                20 kB
Writeback:             0 kB
AnonPages:        881304 kB
Mapped:           395420 kB
Shmem:             79776 kB
KReclaimable:     152892 kB
Slab:             295508 kB
SReclaimable:     152892 kB
SUnreclaim:       142616 kB
KernelStack:        9328 kB
PageTables:        45156 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     7456496 kB
Committed_AS:    5260708 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
Percpu:             2864 kB
HardwareCorrupted:     0 kB
AnonHugePages:    417792 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      314944 kB
DirectMap2M:     4796416 kB
DirectMap1G:           0 kB

使用/proc/cpuinfo和free-mh以及awk,搜索所需字符串,使用:作为字段分隔符,相应地设置变量,将free-mh的输出进一步拆分为一个名为arr的数组,该数组基于“”作为分隔符。最后,使用创建的变量以所需格式打印数据

当搜索以flag开头的行时,我们使用awk的match函数搜索字符串svn或vmx。RSTART变量不为0表示匹配,因此我们对此进行检查以查找所使用的虚拟化类型。由于我们在开始时已将virt设置为“无虚拟化”,因此没有匹配项将打印“无虚拟化”

  awk -F: '/^model name/ { 
                         mod=$2 
                        } 
         /^cpu MHz/    { 
                         mhz=$2 
                        } 
         /^cpu core/ {
                         core=$2
                     } 
         /^flags/ { 
                         virt="No Virtualisation";
                         match($0,"svm");
                         if (RSTART!=0) 
                                       { 
                                         virt="SVM-Virtualisation" 
                                       };
                         match($0,"vmx");
                         if (RSTART!=0) { 
                                         virt="VMX-Virtualisation" 
                                        } 
                  }
         /^Mem:/ {
                         split($2,arr," ");
                         tot=arr[1];
                         free=arr[2]
                  } 
         END { 
                         printf "%s %dMHz %s core(s) %s %sB Memory (%sB Free)\n",mod,mhz,core,virt,tot,free 
             }' /proc/cpuinfo <(free -mh)
awk-F:'/^model name/{
国防部=2美元
} 
/^cpu MHz/{
兆赫=$2
} 
/^cpu核心/{
核心=2美元
} 
/^标志/{
virt=“无虚拟化”;
匹配($0,“svm”);
如果(RSTART!=0)
{ 
virt=“SVM虚拟化”
};
匹配($0,“vmx”);
如果(RSTART!=0){
virt=“VMX虚拟化”
} 
}
/^成员:/{
拆分($2,arr,“”);
tot=arr[1];
自由=arr[2]
} 
结束{
printf“%s%dMHz%s内核%s%sB内存(%sB空闲)\n”,mod,mhz,core,virt,tot,Free

}“/proc/cpuinfo这太疯狂了,非常感谢@Raman!真迷人。SVM/VMX将是另一回事,但这是难以置信的。。。我已经敬畏地看了15分钟了。太棒了。:)我理解你在这里所做的事情的要素(完全清楚发生了什么)。我真的可以在很多情况下使用它,我想。。。我想我会经常看这个的!:)将拆分更改为
:“
而不是
idea以删除前导/尾随空格,并添加一些逗号以分隔输出。好的,现在我必须选择一条包含svm的线,然后以某种方式得到虚拟化标志的是/否答案。非常令人惊讶的感谢,从
.bashrc
:)
awk-F:“'/^model name/{mod=$2}/^cpu-MHz/{MHz=$2}/^cpu-core/{core=$2}/^Mem:/{split($2,arr,”);tot=arr[1];free=arr[2]}END{printf“%s,%dMHz,%s-core(s),%sB Memory(%sB free)\n”、mod MHz,core,core,core,tot,free}/proc/cpfo,我现在也为虚拟化类型添加了一些逻辑。很抱歉,我不知道它这么做了,所以我现在已经取消选中了“接受”标志。你能告诉我你的完整答案吗。我喜欢看不同的技巧,总是非常有用/有趣!收集SVM/VMX信息容易吗?有人主动关闭了它,我看到他们也在上面加了“-2”标志。我真的不明白。我觉得你和拉曼的答案很吸引人,我已经从他们身上学到了很多东西。我的问题是否被认为有失于他们的蔑视?我不明白他们为什么想要粉碎这种创造性和有趣的讨论。。。“已结束。此问题需要详细信息或清晰性。当前不接受答案。添加详细信息并澄清您正在解决的问题。这将帮助其他人回答此问题。您可以编辑此问题或发布新问题。1小时前已结束。”我猜您对示例的最终“目标”不清楚。。。只要打开一条新的线索,对你所追求的东西有更清晰的定义(带样本),这样我们就知道我们在努力追求什么。好吧,你和拉曼可以很容易地理解它。对于一个有趣的话题,我只是没有得到积极的否决和审查/结束。我不能关闭这个,因为Raman给出了一个很好的答案,在阅读上面的内容时,我的问题是绝对清楚的(是否有可能让它更清楚?),所以它看起来就像是无缘无故关闭的。希望拥有3000+权限的人能够再次打开它,看看人们可能会使用哪些其他技术也很好。很有趣。。。现在,我的大多数评论都与替代解决方案一起消失了。哦,好吧。。。