我有这个输出来自一个驱动器diag命令。
Slot Number : 0
Drive's position : DiskGroup 0
Media Error : 0
Other Error : 0
Predictive Failure : 0
Raw Size : 447.130 GB [0x37e436b0 Sectors]
Firmware state : Online, Spun Up
Inquiry Data : PHYM813201FL480BGNSSDSC2KG480G7R SCV1DL58
Foreign State : None
Media Type : Solid State Device
Temperature : 20C (68.00 F)
S.M.A.R.T alert : No
Slot Number : 1
Drive's position : DiskGroup 0
Media Error : 0
Other Error : 0
Predictive Failure : 0
Raw Size : 447.130 GB [0x37e436b0 Sectors]
Firmware state : Online, Spun Up
Inquiry Data : PHYM81320058480BGNSSDSC2KG480G7R SCV1DL58
Foreign State : None
Media Type : Solid State Device
Temperature : 21C (69.80 F)
S.M.A.R.T alert : No
Slot Number : 2
Drive's position : DiskGroup 1
Media Error : 0
Other Error : 0
Predictive Failure : 0
Raw Size : 1.090 TB [0x8bba0cb0 Sectors]
Firmware state : Online, Spun Up
Inquiry Data : SEAGATE ST1200MM0099 ST31WFK0VEBK
Foreign State : None
Media Type : Hard Disk Device
Temperature : 22C (71.60 F)
S.M.A.R.T alert : No
Slot Number : 3
Drive's position : DiskGroup 1
Media Error : 0
Other Error : 0
Predictive Failure : 0
Raw Size : 1.090 TB [0x8bba0cb0 Sectors]
Firmware state : Online, Spun Up
Inquiry Data : SEAGATE ST1200MM0099 ST31WFK0T07T
Foreign State : None
Media Type : Hard Disk Device
Temperature : 22C (71.60 F)
S.M.A.R.T alert : No
Slot Number : 4
Drive's position : DiskGroup 1
Media Error : 0
Other Error : 0
Predictive Failure : 0
Raw Size : 1.090 TB [0x8bba0cb0 Sectors]
Firmware state : Online, Spun Up
Inquiry Data : SEAGATE ST1200MM0099 ST31WFK0VAJK
Foreign State : None
Media Type : Hard Disk Device
Temperature : 22C (71.60 F)
S.M.A.R.T alert : No
Slot Number : 5
Drive's position : DiskGroup 1
Media Error : 0
Other Error : 0
Predictive Failure : 0
Raw Size : 1.090 TB [0x8bba0cb0 Sectors]
Firmware state : Online, Spun Up
Inquiry Data : SEAGATE ST1200MM0099 ST31WFK0SYPC
Foreign State : None
Media Type : Hard Disk Device
Temperature : 22C (71.60 F)
S.M.A.R.T alert : No
Slot Number : 6
Drive's position : DiskGroup 1
Media Error : 0
Other Error : 0
Predictive Failure : 0
Raw Size : 1.090 TB [0x8bba0cb0 Sectors]
Firmware state : Online, Spun Up
Inquiry Data : SEAGATE ST1200MM0099 ST31WFK0MVN2
Foreign State : None
Media Type : Hard Disk Device
Temperature : 22C (71.60 F)
S.M.A.R.T alert : No
Slot Number : 7
Drive's position : DiskGroup 1
Media Error : 0
Other Error : 0
Predictive Failure : 0
Raw Size : 1.090 TB [0x8bba0cb0 Sectors]
Firmware state : Online, Spun Up
Inquiry Data : SEAGATE ST1200MM0099 ST31WFK0SZ2L
Foreign State : None
Media Type : Hard Disk Device
Temperature : 22C (71.60 F)
S.M.A.R.T alert : No 我只想对每个驱动器的3,4,5,7,9和12行在":“标志之后进行修改。这些结果是标准,但我想添加一些颜色,如果它说的是不同的。例如:
Slot Number : 7
Drive's position : DiskGroup 1
Media Error : 4 (I want the whole line in red)
Other Error : 3 (I want the whole line in red)
Predictive Failure : 1 (I want the whole line in red)
Raw Size : 1.090 TB [0x8bba0cb0 Sectors]
Firmware state : Failed. (I want the whole line in red)
Inquiry Data : SEAGATE ST1200MM0099 ST31WFK0SZ2L
Foreign State : Unconfigured (I want the whole line in red)
Media Type : Hard Disk Device
Temperature : 22C (71.60 F)
S.M.A.R.T alert : Yes (I want the whole line in red)我想对每一个驱动器做那些改变,驱动器的数量是可变的,有时是多的,有时是少的。
我已经试过了,但没有用。
awk -F ':' '$1~/^(Media Error|Other Error|Predictive Failure)$/ && $2 > 0 {print "\033[31m" $0 "\e[0m"; next} 1'发布于 2022-04-10 13:17:41
使用任何awk:
$ awk -F '[[:space:]]*:[[:space:]]*' '
BEGIN {
tag2val["Media Error"] = 0
tag2val["Other Error"] = 0
tag2val["Predictive Failure"] = 0
tag2val["Firmware state"] = "Online, Spun Up"
tag2val["Foreign State"] = "None"
tag2val["S.M.A.R.T alert"] = "No"
}
{
tag = $1
val = $2
sub(/^[[:space:]]+/,"",tag)
sub(/[[:space:]]+$/,"",val)
}
(tag in tag2val) && (val != tag2val[tag]) {
$0 = "\033[31m" $0 "\033[0m"
}
{ print }
' file您只需在:周围包含空格,所以$2中的第一件事不是空白,而是从行尾去掉任何尾随空格(如您在输入中的空格)。我还整理了您的结束颜色转义序列,并设置$0,而不是打印在那里,所以你不需要一个next和输出来自两个不同的地方。
https://unix.stackexchange.com/questions/698559
复制相似问题