首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用awk挑选出"second“值?

如何使用awk挑选出"second“值?
EN

Stack Overflow用户
提问于 2012-09-20 06:02:59
回答 3查看 4K关注 0票数 1

到目前为止,精心制作的脚本

代码语言:javascript
复制
iostat -p -x 1 2| grep $1[^[:digit:]] | awk '{print $9}'

将返回两行:

代码语言:javascript
复制
0.16
0.00

因为iostat正在采集两个样本。但你已经知道了。我的问题是,既然你和我都知道每次都会是两行,那么我如何准确地选择第二行呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-20 06:14:48

{print $9}之前添加NR==2,告诉awk匹配记录2。

例如,在我的系统上,

代码语言:javascript
复制
$ iostat -x /dev/sda 1 2 | grep sda

$ iostat -x /dev/sda 1 2 | grep sda | awk 'NR==1 {print $9}'

$ iostat -x /dev/sda 1 2 | grep sda | awk 'NR==2 {print $9}'

生产的

代码语言:javascript
复制
sda               0.11     1.04    2.00    1.28   125.95    63.24   115.15     0.07   21.04    4.66   46.60   2.36   0.78
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
0.07
0.00

其中"0.00“行是第三个命令的结果。

补充说明:由于awk可以匹配文本,因此不需要运行单独的grep命令。但是,awk脚本需要一个索引变量。下面的第一个示例是一个简单的grep,用来展示awk的工作原理。接下来的两个示例是简单的awk代码,它有一个匹配测试来递增索引,另一个匹配测试加上索引测试来打印。最后一个例子展示了如何去掉匹配表达式的额外外观。请注意,在这些示例中,为了清晰起见,我将print $9替换为print,并将$1[^[:digit:]]替换为sda[^0-9]。下面是在awk中而不是在grep中进行匹配的示例

代码语言:javascript
复制
$ iostat -p -x 1 2  | grep 'sda '
sda               0.11     1.04    2.00    1.28   125.70    63.16   115.09     0.07   21.04    4.66   46.57   2.36   0.78
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

$ iostat -p -x 1 2  | awk '/sda[^0-9]/ {++t} t==1 && /sda[^0-9]/ {print}'
sda               0.11     1.04    2.00    1.28   125.70    63.16   115.09     0.07   21.04    4.66   46.57   2.36   0.78

$ iostat -p -x 1 2  | awk '/sda[^0-9]/ {++t} t==2 && /sda[^0-9]/ {print}'
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

$ iostat -p -x 1 4  | awk '/sda[^0-9]/ && t++ && t==2 {print}'
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
票数 6
EN

Stack Overflow用户

发布于 2012-09-20 06:04:01

通过管道将其发送到tail -1,这将选择最后一行。

代码语言:javascript
复制
iostat -p -x 1 2| grep $1[^[:digit:]] | awk '{print $9}' | tail -1
票数 2
EN

Stack Overflow用户

发布于 2012-09-20 06:08:06

通过结合使用headtail,您可以从输入中选择任意序列的行:

代码语言:javascript
复制
(cmd) | tail -n+2 | head -n 1

无论命令的输出有多长,都获取输入的第二行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12503555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档