修改一行字



我拼凑了一个一行代码,这样我就可以快速找到服务器上有中等错误的驱动器。就像这样:

/var/lib/einarc/tools/adaptec_arcconf/cli getlogs 1 device tabular | egrep 'serialNumber|mediumErrors|vendorID' | awk '{$2="";print}' | awk '/^vendorID  WDC/{p=1}p' | grep -C1 'mediumErrors  [1-9]'

虽然这在有西部数据驱动器的服务器上工作得很好,但有些服务器是希捷的,因此一行符不能在它们上工作,因为:

awk '/^vendorID  WDC/{p=1}p'

两个服务器上表格日志的原始输出如下所示:

Western Digital:

  driveErrorEntry             
     smartError ....................... false
     vendorID ......................... LSI CORP
     serialNumber ..................... 
     wwn .............................. 41121562336217ea
     deviceID(T:L) .................... 0(0:0)
     productID ........................ SAS2X26 
     numParityErrors .................. 0
     linkFailures ..................... 0
     hwErrors ......................... 0
     abortedCmds ...................... 10
     mediumErrors ..................... 0
     smartWarning ..................... 0
      driveErrorEntry             
         smartError ....................... false
         vendorID ......................... WDC     
         serialNumber ..................... WD-WCAW25942651
         wwn .............................. 0000000000000000
         deviceID(T:L) .................... 13(13:0)

希捷:

Controllers found: 1
   ControllerLog                  
      controllerID ..................... 0
      type ............................. 0
      time ............................. 1365801225
      version .......................... 3
      tableFull ........................ false
      driveErrorEntry             
         smartError ....................... false
         vendorID ......................... LSI CORP
         serialNumber ..................... 
         wwn .............................. 411313200032c06a
         deviceID(T:L) .................... 0(0:0)
         productID ........................ SAS2X26 
         numParityErrors .................. 0
         linkFailures ..................... 0
         hwErrors ......................... 0
         abortedCmds ...................... 12
         mediumErrors ..................... 0
         smartWarning ..................... 0

我希望得到的输出如下:

serialNumber  WD-WMAYP5242602
mediumErrors  457
vendorID  WDC
serialNumber  WD-WMAYP3262235
mediumErrors  2

我想确保我没有过滤掉重要的信息,因为一个服务器没有WDC驱动器,但同时我也不想要任何不直接涉及硬盘驱动器的信息-即控制器输出应该被忽略,不管安装的驱动器类型。

谁能建议一种方法来做到这一点,将工作(在bash)?

这是我的解决方案。

/var/lib/einarc/tools/adaptec_arcconf/cli getlogs 1 device tabular | egrep 'serialNumber|mediumErrors|deviceID' | awk '{$2="";print}' | grep -C2 'mediumErrors  [1-9]'

我稍微修改了它来查找deviceID而不是vendorID,因为这更有用,然后我可以简单地删除过滤WDC驱动器的awk。使用-C2而不是-C1还可以确保即使输出的格式与预期略有不同,我仍然可以获得所有数据。

最新更新