迄今为止专业制作的剧本
iostat -p -x 1 2| grep $1[^[:digit:]] | awk '{print $9}'
Run Code Online (Sandbox Code Playgroud)
将返回两行:
0.16
0.00
Run Code Online (Sandbox Code Playgroud)
因为iostat正在拍两个样本.但你已经知道了.我的问题是因为你和我都知道每次都会有两行,我怎么选出第二行呢?
添加NR==2之前{print $9}告诉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}'
Run Code Online (Sandbox Code Playgroud)
生成
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
Run Code Online (Sandbox Code Playgroud)
其中"0.00"行是第三个命令的结果.
附加说明:没有必要运行单独的grep命令,因为awk可以匹配文本.但是,awk脚本需要一个索引变量.下面的第一个示例很简单,grep可以显示哪些内容awk有效.接下来的两个示例是简单的awk代码,它们具有用于递增索引的匹配测试以及用于打印的另一个匹配测试和索引测试.最后一个示例显示了如何摆脱匹配表达式的额外外观.请注意,在这些例子中我换成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
Run Code Online (Sandbox Code Playgroud)