Linux 从/proc/meminfo文件中提取字段
/proc/meminfo文件给出了机器的cpu要求。命令的输出如下所示: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:
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
Betterawk'/MemTotal/{print$(NF-1)}/proc/meminfo
的“总内存”
是原始问题中的一个输入错误。awk'/Total Memory/{print>$(NF-1)}'/proc/meminfo
Betterawk'/MemTotal/{print$(NF-1)}'/proc/meminfo
“的总内存”是原始问题中的一个打字错误。