0

Solarisマシンでの出力をスキャンしてiostat -En、エラーのあるディスクが見つかったときに、そのディスクに関する2行が最終出力に送信されるようにする必要があります。これはこれまでのところうまく機能します

iostat -En | grep 'Errors: [1-9]' -A 1

しかし、CD / DVDデバイスを含めようとすると、壁にぶつかります。contaxtフラグ(-A|B|C)は機能しないようであるため、-vこれを使用することはできません。

-bash-4.0$ iostat -En | grep -B 1 -vi "CD/DVD" | grep 'Errors: [1-9]' -A 1
c0t3d0           Soft Errors: 2 Hard Errors: 0 Transport Errors: 0
Vendor: TSSTcorp Product: CD/DVDW TS-L632D Revision: SR02 Serial No:

「CD/DVD」を含む行とその前の行を削除する必要があるため、ここには出力がないはずです。これを任意の言語のスクリプトとして記述するのは簡単ですが、追加のスクリプトをインストールせずにホストで実行できる単一のコマンドである必要があるため、perl -e使用できると思います。私はperlを知らないので、このアプローチを試していません。

出力例iostat -En

-bash-4.0$ iostat -En
c0t0d0           Soft Errors: 0 Hard Errors: 0 Transport Errors: 0
Vendor: SEAGATE  Product: ST973402SSUN72G  Revision: 0603 Serial No: *removed*
Size: 73.40GB <73400057856 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 0 Predictive Failure Analysis: 0
c0t3d0           Soft Errors: 2 Hard Errors: 0 Transport Errors: 0
Vendor: TSSTcorp Product: CD/DVDW TS-L632D Revision: SR02 Serial No:
Size: 0.00GB <0 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 2 Predictive Failure Analysis: 0
c0t1d0           Soft Errors: 0 Hard Errors: 0 Transport Errors: 0
Vendor: SEAGATE  Product: ST973402SSUN72G  Revision: 0603 Serial No: *removed*
Size: 73.40GB <73400057856 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 0 Predictive Failure Analysis: 0

この場合、エラーのあるデバイスは光学ドライブだけであり、それらを気にしないため、出力はありません。

c0t1d0           Soft Errors: 0 Hard Errors: 1 Transport Errors: 0
Vendor: SEAGATE  Product: ST973402SSUN72G  Revision: 0603 Serial No: *removed*

これは私が探している出力です。何か案は?

4

2 に答える 2

1

試すnawk

iostat -En | nawk '/Errors: [1-9]/{ getline line; if (line!~/CD|DVD/) print line}
于 2010-08-02T15:07:31.160 に答える
1

grep -v patternパターンに一致しないすべての行を印刷しますが、パターンにgrep -B 1 -v pattern一致する行を含め、パターンに一致しない行の前のすべての行も印刷します。

たとえば、次がfile含まれている場合:

ABCD
DEFG
GHIJ

次にgrep -v D file、あなたに与えます:

GHIJ

しかしgrep -B1 -v D fileあなたに与える:

DEFG
GHIJ

必要な処理の種類は、には複雑すぎますgrep

于 2010-08-02T19:10:20.843 に答える