1

これまでに巧妙に作成されたスクリプト

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

次の 2 行が返されます。

0.16
0.00

iostat は 2 つのサンプルを取得しているためです。しかし、あなたはすでにそれを知っていました。私の質問は、あなたと私は毎回正確に 2 行になることを知っているので、正確に 2 番目の行をどのように選択するのでしょうか?

4

3 に答える 3

6

レコード 2 に一致するように伝えるNR==2前に追加します。{print $9}awk

たとえば、私のシステムでは、

$ 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」行は、3 番目のコマンドの結果です。

追記:テキストを照合できるので、別のgrepコマンドを実行する必要はありません。awkただし、awk スクリプトにはインデックス変数が必要です。次の例の最初のものは、何が機能するgrepかを示す簡単なものawkです。次の 2 つの例はawk、インデックスをインクリメントする一致テストと、出力する別の一致テストとインデックス テストを含む単純なコードです。最後の例は、一致式の余分な出現を取り除く方法を示しています。これらの例では、わかりやすくprint $9するために とに置き換えたことに注意してください。以下は、 in の代わりに in でマッチングを行う例です:print$1[^[:digit:]]sda[^0-9]awkgrep

$ 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
于 2012-09-19T22:14:47.737 に答える
2

組み合わせheadtail、入力から任意の行のシーケンスを選択できます。

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

コマンドの出力の長さに関係なく、入力の2行目を取得します。

于 2012-09-19T22:08:06.180 に答える
2

にパイプするとtail -1、最後の行が選択されます。

iostat -p -x 1 2| grep $1[^[:digit:]] | awk '{print $9}' | tail -1
于 2012-09-19T22:04:00.773 に答える