4

我有这个 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 中,以查看是否存在时间相关性。

4

2 回答 2

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)
} 
于 2012-05-07T19:21:22.717 回答
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}
'
于 2012-05-07T19:14:29.760 回答