Как передать в 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}
'