我有这个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
传递给此脚本的语法?每次运行脚本时我都要输入{{1}}。我知道我可以创建第二个脚本来启动第一个脚本,但我认为这很麻烦,并且想知道正确的方法。
顺便说一下,我的显卡出现了一些问题,并且在某些设备上看到了UncorrErr标志,是否有人参考了这意味着什么或如何进一步排除故障?现在我只是定期运行这个脚本来查看错误何时出现在lspci中以查看是否存在时间相关性。
答案 0 :(得分: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)
}
答案 1 :(得分: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}
'