2012-05-07 14 views
4

にパイプ私はこのawkスクリプトを持っていた:どのようにawkスクリプト

#!/usr/bin/awk -f 
BEGIN {IGNORECASE=1} 
/nVidia/ {inner=1;pci=$1} 
/(corr|fatal)err\-/ {if (inner) print pci, $1, $2, $3, $4, $5, $6, $7} 
$0=="" {inner=0} 

は、このスクリプトに常にパイプsudo lspci -vvvの構文がありますか?私はスクリプトを実行するたびにsudo lspci -vvv|./checkpciと入力する必要があります。私は最初のスクリプトを起動するために2番目のスクリプトを作成することができたことは知っていますが、それは厄介であり、そうする正しい方法を知りたいと思います。

私はグラフィックスカードのクラッシュに関するいくつかの問題を抱えており、一部のデバイスでUncorrErrフラグを見たことがあります。これはどういう意味か、さらにトラブルシューティングを行う方法について誰かが参照していますか?今は、このスクリプトを定期的に実行して、エラーがlspciに表示されるタイミングを確認し、時間相関があるかどうかを確認します。

+0

オハイオ州およびライン '/(CORR |致命的な)ERR \ - /'マイナスの代わりにプラスを検出するように変更されます。テスト用にマイナスを使用していますので、出力を取得します。 – bVector

+0

は、ここでPCIエラーの良い参照を見つけました:http://lwn.net/Articles/193468/ – bVector

答えて

3

これはあなたのために働く必要があります。

#!/usr/bin/awk -f 
BEGIN { 
    IGNORECASE = 1 
    cmd = "sudo lspci -vvv" 
    while ((cmd | getline) > 0) { 
     if ($0 ~ /nVidia/) {inner = 1; pci = $1} 
     if ($0 ~ /(corr|fatal)err\-/) {if (inner) print pci, $1, $2, $3, $4, $5, $6, $7} 
     if ($0 == "") {inner = 0} 
    } 
    close(cmd) 
} 
2

私はシェルスクリプトにあなたのawkスクリプトを変更します

#!/bin/sh 
sudo lspci -vvv | /usr/bin/awk ' 
    BEGIN {IGNORECASE=1} 
    /nVidia/ {inner=1;pci=$1} 
    /(corr|fatal)err\-/ {if (inner) print pci, $1, $2, $3, $4, $5, $6, $7} 
    $0=="" {inner=0} 
'