2012-05-07 5 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 сценария в сценарий оболочки:

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