Как передать в 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, чтобы увидеть, есть ли временная корреляция.

2 ответа

Решение

Это должно работать для вас:

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

Я бы изменил ваш 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}
'
Другие вопросы по тегам