如何管道进入awk脚本

时间:2012-05-07 18:37:21

标签: bash awk device pci-bus

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

2 个答案:

答案 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}
'