gpt4 book ai didi

linux - 如何使这个 awk 命令更简单

转载 作者:太空宇宙 更新时间:2023-11-04 09:38:41 25 4
gpt4 key购买 nike

有没有办法使这个命令更简单(即不使用 awk 两次):

awk '/cpu MHz/ {print $4}' < /proc/cpuinfo | awk -F'.' 'NR==1 {print $1}'

?

还有,有没有办法避免在这里使用cut命令:

ip addr show dev eth0 | awk '$1=="inet" {print $2}' | cut -f1 -d '/'

?

谢谢。

最佳答案

第一个是这样的:

awk '/cpu MHz/ {print $4}' < /proc/cpuinfo | awk -F'.' 'NR==1 {print $1}'

考虑到你有这样一个字符串:

cpu MHz         : 800.000
cpu MHz : 800.000
cpu MHz : 800.000
cpu MHz : 800.000

如果你想要数字的整数部分只是第一行,你可以这样做:

$ awk -F"[ .]" '/cpu MHz/ {print $(NF-1); exit}' /proc/cpuinfo
800

即匹配行,打印倒数第二个字段,然后退出,避免额外处理。

根据评论,您还想在不同的命令中获取第二个匹配行。为此,您可以:

awk -F"[ .]" '/cpu MHz/ {if (f) {print $(NF-1); exit}; f=1}' /proc/cpuinfo

它的作用是使用一个标志。在第一次匹配时,标志被激活,因此在下一次匹配时它打印值并退出。


第二个是这样的:

ip addr show dev eth0 | awk '$1=="inet" {print $2}' | cut -f1 -d '/'

你可以做的是根据 / 将第二个字段拆分为切片并打印第一个:

$ ip addr show dev eth0 | awk '$1=="inet" {split($2, a, "/"); print a[1]}'
192.168.123.123

关于linux - 如何使这个 awk 命令更简单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23610804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com