繁体   English   中英

如何使用awk挑选“第二”值?

[英]How to pick out “second” value using awk?

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

iostat -p -x 1 2| grep $1[^[:digit:]] | awk '{print $9}'

将返回两行:

0.16
0.00

因为iostat正在采集两个样本。 但是你已经知道了。 我的问题是,由于您和我俩都知道每次都会精确到两行,我该如何准确地选择第二行?

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

例如,在我的系统上

$ 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}'

生产的

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”行是第三条命令的结果。

附加说明:不必运行单独的grep命令,因为awk可以匹配文本。 但是,awk脚本随后需要一个索引变量。 以下示例中的第一个示例是一个简单的grep用于显示awk工作原理。 接下来的两个示例是简单的awk代码,其中包含一个匹配测试以增加索引,另一个匹配测试加上索引测试以进行打印。 最后一个示例显示了如何消除match表达式的多余外观。 注意,在这些示例中,为清晰起见,我将print $9替换print $9 print ,将$1[^[:digit:]]替换为sda[^0-9] 以下是在awk而不是grep进行匹配的示例:

$ 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

用管道将其tail -1 ,这将选择最后一行。

iostat -p -x 1 2| grep $1[^[:digit:]] | awk '{print $9}' | tail -1

组合headtail可以从输入中选择任何行顺序:

(cmd) | tail -n+2 | head -n 1

无论命令输出多长时间,都会获取第二行输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM