修改一个班轮

时间:2013-04-12 21:22:44

标签: bash scripting awk grep

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

/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]'

虽然这在拥有西部数据驱动器的服务器上运行得非常好,但是有一些是Seagate,因此,由于以下原因,一个衬垫不起作用:

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中)?

1 个答案:

答案 0 :(得分:0)

这是我的解决方案。

/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也确保即使输出的格式与预期稍有不同,我仍然可以获得所有数据。