2012-05-07 54 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。我知道我可以創建第二個腳本來啓動第一個腳本,但我認爲這很麻煩,並希望知道這樣做的正確方法。另一方面,我遇到了一些與我的顯卡崩潰有關的問題,並且在某些設備上看到了UncorrErr標誌,是否有人提供了關於這意味着什麼或者如何進一步排除故障的參考?現在我要定期運行這個腳本來查看lspci中出現的錯誤是否存在時間相關性。

+0

噢,行了'/(更正|致命的)錯誤\ - /'將被改爲檢測加號而不是減號,我只是使用減號進行測試,所以我得到了一些輸出 – 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腳本到一個shell腳本:

#!/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} 
'