一致するものがある場合、awkは2行を印刷します。

一致するものがある場合、awkは2行を印刷します。

私の出力のいくつかは次のとおりです。

Gathering data for drive 1 ...
Drive name:  id1,sd@n5000cca17096
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp:  41 C

Gathering data for drive 2 ...
Drive name:  id1,sd@n5000cca24156
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp:  41 C

Gathering data for drive 3 ...
Drive name:  id1,sd@n5000cca8749
Drive Model: HUH721010AL4204
failed to get drive stats

Gathering data for drive 4 ...
Drive name:  id1,sd@n5000cca19183
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp:  41 C

Gathering data for drive 5 ...
Drive name:  id1,sd@n5000cca4607
Drive Model: HUSMH8010BSS204
failed to get drive stats

Gathering data for drive 6 ...
Drive name:  id1,sd@n5000cca10152
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp:  41 C

ドライブ統計を返すことができない(したがって一致する)すべてのドライブの「ドライブ名」を印刷したいと思いますfailed to get drive stats

前の行を取得する方法を知っています。

awk '$0=="failed to get drive stats" && $2>1 {print f} {f=$0}'

しかし、これは私には役に立ちません。

希望の出力:

Drive name:  id1,sd@n5000cca8749
Drive name:  id1,sd@n5000cca4607

編集する:

何らかの理由で出力がリダイレクトされると、端末と同じ方法で表示されません。私が実行した場合:

command >out.txt 2>&1

出力ファイルは次のとおりです。

failed to get drive stats
failed to get drive stats

Gathering data for drive 1 ...
Drive name:  id1,sd@n5000cca17096
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp:  41 C

Gathering data for drive 2 ...
Drive name:  id1,sd@n5000cca24156
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp:  41 C

....

どちらのawk回答も仕事を提供しましたが、他に質問があるようです。

ベストアンサー1

$ awk -F ':' '$1 == "Drive name" { saved = $0 } $0 == "failed to get drive stats" { print saved }' file
Drive name:  id1,sd@n5000cca8749
Drive name:  id1,sd@n5000cca4607

まず、入力フィールド区切り記号をに設定します:。次に、savedドライブ名を指定する行が見つかるたびに、その行を変数に保存します。

行が表示されると、failed to get drive stats現在の値が印刷されます。saved

おすすめ記事