Bash如何编辑变量



我是bash的新手。现在我要读取一个值,但是控制台的输出太长,我只想将其缩短为特定的值。

netstat -m
24270/3315/27585 mbufs in use (current/cache/total)
4142/1724/5866/1000000 mbuf clusters in use (current/cache/total/max)
40/1478 mbuf+clusters out of packet secondary zone in use (current/cache)
0/145/145/524288 4k (page size) jumbo clusters in use (current/cache/total/max)
0/0/0/524288 9k jumbo clusters in use (current/cache/total/max)
0/0/0/83968 16k jumbo clusters in use (current/cache/total/max)
...

现在我想进入第二行中的5866,并将其包装在一个变量中。目前我的脚本看起来像这样:

mbuf_stat=$(netstat -m)
mbuf=$mbuf_stat
mbuf=${mbuf#*)}
mbuf=${mbuf#*/}
mbuf=${mbuf#*/}
mbuf=${mbuf%%/*}
echo "$mbuf"

有更简单的方法吗?我觉得挺复杂的。遗憾的是,我还没有找到一个更简单的方法。

使用awk:

mbuf=$(netstat -m | awk -F'/' 'NR == 2 { print $3; exit }')

-F'/'使/成为字段分隔符。NR == 2匹配文件的第二行。print $3打印第三个字段,其中包含5866,然后exit退出脚本。

这个呢:

mbuf=$(netstat -m | grep "mbuf clusters in use" | awk -F/ '{print $3}')

与Barmar的答案的不同之处在于,我正在寻找包含"mbuf集群"的行。而不是假设它是第二个。

$ netstat -m | awk -F/ '/mbuf clusters in use/{print $3}' 
5866
mbuf=$( netstat -m | 

gawk '$_=$--NF' RS='^$' FS='/[^/]+mbuf[^/]*clusters in use.*$|[/n]+|$' )

mawk -F/ '$!NF=$((NF*=/mbuf[^/]*clusters in use/)^_+NR)'
5866

最新更新