如何将内容管道传递给awk脚本

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


哦,而且行 /(corr|fatal)err\-/ 将被更改为检测加号而不是减号,我只是使用减号进行测试,以便获得一些输出。 - bVector
在此处找到了关于PCI错误的很好的参考资料:http://lwn.net/Articles/193468/ - bVector
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)
} 

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接