awk - 使用 AWK 时无输出
问题描述
我目前正在制作一个检查打印机状态的脚本。输出为打印机颜色、最大级别、当前级别和当前百分比。我遇到的问题是尝试从命令中过滤颜色时。当我指定/.*\.6\.1\./
or/.*\.6\.1/
或/.*\.6/
我没有从 CL 得到输出时。我的代码目前仅在我指定类似/.*\.6\.1\.1/
or时才有效/.*\.6\.1\.3/
,然后我显然得到第一个或 x 颜色的输出,但我想要所有颜色的输出。我想知道我是否做错了,是否有办法解决它?
需要过滤:
iso.3.6.1.2.1.43.11.1.1.2.1.1 = INTEGER: 1
iso.3.6.1.2.1.43.11.1.1.2.1.2 = INTEGER: 1
iso.3.6.1.2.1.43.11.1.1.2.1.3 = INTEGER: 1
iso.3.6.1.2.1.43.11.1.1.2.1.4 = INTEGER: 1
iso.3.6.1.2.1.43.11.1.1.2.1.5 = INTEGER: 1
iso.3.6.1.2.1.43.11.1.1.2.1.6 = INTEGER: 1
iso.3.6.1.2.1.43.11.1.1.2.1.7 = INTEGER: 1
iso.3.6.1.2.1.43.11.1.1.3.1.1 = INTEGER: 1
iso.3.6.1.2.1.43.11.1.1.3.1.2 = INTEGER: 2
iso.3.6.1.2.1.43.11.1.1.3.1.3 = INTEGER: 3
iso.3.6.1.2.1.43.11.1.1.3.1.4 = INTEGER: 4
iso.3.6.1.2.1.43.11.1.1.3.1.5 = INTEGER: 5
iso.3.6.1.2.1.43.11.1.1.3.1.6 = INTEGER: 6
iso.3.6.1.2.1.43.11.1.1.3.1.7 = INTEGER: 7
iso.3.6.1.2.1.43.11.1.1.6.1.1 = STRING: "CyanInkCartridge"
iso.3.6.1.2.1.43.11.1.1.6.1.2 = STRING: "MagentaInkCartridge"
iso.3.6.1.2.1.43.11.1.1.6.1.3 = STRING: "YellowInkCartridge"
iso.3.6.1.2.1.43.11.1.1.6.1.4 = STRING: "MattBlackInkCartridge"
iso.3.6.1.2.1.43.11.1.1.6.1.5 = STRING: "MattBlackInkCartridge"
iso.3.6.1.2.1.43.11.1.1.6.1.6 = STRING: "BlackInkCartridge"
iso.3.6.1.2.1.43.11.1.1.6.1.7 = STRING: "WasteInkTank"
iso.3.6.1.2.1.43.11.1.1.7.1.1 = INTEGER: 15
iso.3.6.1.2.1.43.11.1.1.7.1.2 = INTEGER: 15
iso.3.6.1.2.1.43.11.1.1.7.1.3 = INTEGER: 15
iso.3.6.1.2.1.43.11.1.1.7.1.4 = INTEGER: 15
iso.3.6.1.2.1.43.11.1.1.7.1.5 = INTEGER: 15
iso.3.6.1.2.1.43.11.1.1.7.1.6 = INTEGER: 15
iso.3.6.1.2.1.43.11.1.1.7.1.7 = INTEGER: 15
iso.3.6.1.2.1.43.11.1.1.8.1.1 = INTEGER: 1300
iso.3.6.1.2.1.43.11.1.1.8.1.2 = INTEGER: 1300
iso.3.6.1.2.1.43.11.1.1.8.1.3 = INTEGER: 1300
iso.3.6.1.2.1.43.11.1.1.8.1.4 = INTEGER: 1300
iso.3.6.1.2.1.43.11.1.1.8.1.5 = INTEGER: 1300
iso.3.6.1.2.1.43.11.1.1.8.1.6 = INTEGER: 1300
iso.3.6.1.2.1.43.11.1.1.8.1.7 = INTEGER: 10000
iso.3.6.1.2.1.43.11.1.1.9.1.1 = INTEGER: 1300
iso.3.6.1.2.1.43.11.1.1.9.1.2 = INTEGER: 780
iso.3.6.1.2.1.43.11.1.1.9.1.3 = INTEGER: 780
iso.3.6.1.2.1.43.11.1.1.9.1.4 = INTEGER: 780
iso.3.6.1.2.1.43.11.1.1.9.1.5 = INTEGER: 780
iso.3.6.1.2.1.43.11.1.1.9.1.6 = INTEGER: 1300
iso.3.6.1.2.1.43.11.1.1.9.1.7 = INTEGER: 4000
当前代码:
#!/bin/sh
snmpwalk -v1 -c public $1 1.3.6.1.2.1.43.11.1.1 | awk '
/.*\.6\.1\.1/ {
sub(/.*\./,"");
split($0,TT,/[ "]*/);
color[TT[1]]=TT[4];
}
/.*\.8/ {
sub(/.*\./,"");
split($0,TT,/[ "]*/);
maxlevel[TT[1]]=TT[4];
}
/.*\.9/ {
sub(/.*\./,"");
split($0,TT,/[ "]*/);
if ((TT[4] / maxlevel[TT[1]] * 100) < 50){
print "\033[31m Color: " color[TT[1]] ", Current Level: " TT[4] ", Max Level: " maxlevel[TT[1]] ", Percentage: %" TT[4] / maxlevel[TT[1]] * 100 "\033[0m";
}else{
print "\033[32m Color: " color[TT[1]] ", Current Level: " TT[4] ", Max Level: " maxlevel[TT[1]] ", Percentage: %" TT[4] / maxlevel[TT[1]] * 100 "\033[0m";
}
}
'
命令:./PrintInfo 192.168.15.102
电流输出:
Color: CyanInkCartridge, Current Level: 1300, Max Level: 1300, Percentage: %100
Color: , Current Level: 780, Max Level: 1300, Percentage: %60
Color: , Current Level: 780, Max Level: 1300, Percentage: %60
Color: , Current Level: 780, Max Level: 1300, Percentage: %60
Color: , Current Level: 780, Max Level: 1300, Percentage: %60
Color: , Current Level: 1300, Max Level: 1300, Percentage: %100
Color: , Current Level: 4000, Max Level: 10000, Percentage: %40
期望的输出:
Color: CyanInkCartridge, Current Level: 1300, Max Level: 1300, Percentage: %100
Color: MagentaInkCartridge, Current Level: 780, Max Level: 1300, Percentage: %60
Color: YellowInkCartridge, Current Level: 780, Max Level: 1300, Percentage: %60
Color: MattBlackInkCartridge, Current Level: 780, Max Level: 1300, Percentage: %60
Color: MattBlackInkCartridge, Current Level: 780, Max Level: 1300, Percentage: %60
Color: BlackInkCartridge, Current Level: 1300, Max Level: 1300, Percentage: %100
Color: WasteInkTank, Current Level: 4000, Max Level: 10000, Percentage: %40
所需的输出是具有上面列出的所有颜色,而不仅仅是一种颜色。正如我上面所说的,问题是当我尝试这样做时,购买更改代码/.*\.6\.1\./
而不是/.*\.6\.1\.1/
命令行根本不会显示任何输出,也不会给我一个错误。我做错了什么可能导致这样的事情?
解决方案
问题是所有行的第一部分都匹配/.*\.6\.1\./
。
如果您改为将其更改为这样的内容,使其仅匹配彩色线条,
/11.*\.6\.1\./ {
你得到:
$ awk -f a.awk file
Color: CyanInkCartridge, Current Level: 1300, Max Level: 1300, Percentage: %100
Color: MagentaInkCartridge, Current Level: 780, Max Level: 1300, Percentage: %60
Color: YellowInkCartridge, Current Level: 780, Max Level: 1300, Percentage: %60
Color: MattBlackInkCartridge, Current Level: 780, Max Level: 1300, Percentage: %60
Color: MattBlackInkCartridge, Current Level: 780, Max Level: 1300, Percentage: %60
Color: BlackInkCartridge, Current Level: 1300, Max Level: 1300, Percentage: %100
Color: WasteInkTank, Current Level: 4000, Max Level: 10000, Percentage: %40
推荐阅读
- android - 如何获取来电的 sim id(默认拨号器)
- javascript - 开玩笑说排序不是一个函数,即使正在设置测试数组
- google-location-services - Google 外卖位置历史 JSON 文件中距离参数的单位是什么?
- html - 如何获取具有特定后续兄弟元素的元素?
- rust - 返回异步闭包的函数的返回类型?
- amazon-web-services - 将 Word press 从 localhost 迁移到 AWS EC2 后的 .Owl Carousel 问题
- if-statement - SALESFORCE:电子邮件模板条件字段不起作用
- image-processing - 使用 Imagemagick 调整对数图像大小?
- python - setuptools 中的额外包
- postgresql - 为什么没有 ST_GeographyFromWKB() 函数?