Linux 从/proc/meminfo文件中提取字段

Linux 从/proc/meminfo文件中提取字段,linux,memory,awk,grep,cat,Linux,Memory,Awk,Grep,Cat,/proc/meminfo文件给出了机器的cpu要求。命令的输出如下所示: MemTotal: 2002424 kB MemFree: 1061248 kB MemAvailable: 1562492 kB Buffers: 79584 kB Cached: 522376 kB SwapCached: 0 kB Active: 450252 kB Inactive:

/proc/meminfo文件给出了机器的cpu要求。命令的输出如下所示:

MemTotal:        2002424 kB
MemFree:         1061248 kB
MemAvailable:    1562492 kB
Buffers:           79584 kB
Cached:           522376 kB
SwapCached:            0 kB
Active:           450252 kB
Inactive:         332780 kB
Active(anon):     181772 kB
Inactive(anon):       92 kB
Active(file):     268480 kB
Inactive(file):   332688 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                64 kB
Writeback:             0 kB
AnonPages:        181028 kB
Mapped:           147104 kB
Shmem:               796 kB
Slab:             111516 kB
SReclaimable:      62984 kB
SUnreclaim:        48532 kB
KernelStack:        3680 kB
PageTables:         8908 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1001212 kB
Committed_AS:    1177904 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      133096 kB
DirectMap2M:     1925120 kB
DirectMap1G:           0 kB
如何在Linux中使用$cat命令或使用
awk
grep
?提取
2002424
Total Memory

甚至更好;就用吧!从后面开始,删除第一列('kB'),并使用:
$(NF-1)
!谢谢

结果

2002424

您可以使用捕捉所需的行并获得所需的列(5)

甚至更好;就用吧!从后面开始,删除第一列('kB'),并使用:
$(NF-1)
!谢谢

结果

2002424


使用正则表达式作为GNU awk 4.2.1的字段分隔符,您将得到以下示例:

> awk -F': *' -v var='MemTotal' '$1 == var { print $2 }' /proc/meminfo 
4029952 kB
如果要分别处理数字和单位,请使用拆分($2,f,/+//)
将空白处的字段拆分为数组
f
,您将得到:

> awk -F': *' -v var='MemTotal' '$1 == var { split($2, f, / +/); print $1 "=" f[1] f[2] }' /proc/meminfo 
MemTotal=4029952kB
使用GNU awk 4.2.1和Linux 4.12.14,我不需要额外的
cat/proc/meminfo
来为
awk
提供数据

因此,为了最好地匹配问题,我的答案将是以下变体之一:

> awk -F': *' -v var='MemTotal' '$1 == var { split($2, f, / +/); print f[1] }' /proc/meminfo 
4029952

我认为这已经废弃了@0stone0的答案。

使用正则表达式作为GNU awk 4.2.1的字段分隔符,例如:

> awk -F': *' -v var='MemTotal' '$1 == var { print $2 }' /proc/meminfo 
4029952 kB
如果要分别处理数字和单位,请使用拆分($2,f,/+//)将空白处的字段拆分为数组
f
,您将得到:

> awk -F': *' -v var='MemTotal' '$1 == var { split($2, f, / +/); print $1 "=" f[1] f[2] }' /proc/meminfo 
MemTotal=4029952kB
使用GNU awk 4.2.1和Linux 4.12.14,我不需要额外的
cat/proc/meminfo
来为
awk
提供数据

因此,为了最好地匹配问题,我的答案将是以下变体之一:

> awk -F': *' -v var='MemTotal' '$1 == var { split($2, f, / +/); print f[1] }' /proc/meminfo 
4029952

我认为这已经过时了@0stone0的答案。

欢迎使用SO,您的示例输入不清楚。请在您的输入和预期输出的样本中明确说明,请编辑您的问题,然后让我们知道。欢迎使用SO,您的样本输入不明确。请在您的输入和预期输出样本中说明清楚,请编辑您的问题并让我们知道。
awk'/Total Memory/{print$(NF-1)}/proc/meminfo
Better
awk'/MemTotal/{print$(NF-1)}/proc/meminfo
“总内存”
是原始问题中的一个输入错误。
awk'/Total Memory/{print>$(NF-1)}'/proc/meminfo
Better
awk'/MemTotal/{print$(NF-1)}'/proc/meminfo
“的总内存”是原始问题中的一个打字错误。