Нет вывода при использовании AWK - PullRequest
0 голосов
/ 29 апреля 2019

В настоящее время я делаю скрипт, который проверяет состояние принтера.Выходными данными являются Цвет принтера, Максимальный уровень, Текущий уровень и Текущий процент.У меня проблема при попытке отфильтровать цвет из команды.Когда я указываю /.*\.6\.1\./ или /.*\.6\.1/ или /.*\.6/, я не получаю вывод из CL.Мой код в настоящее время работает, только когда я указываю что-то вроде /.*\.6\.1\.1/ или /.*\.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/, командная строка вообще не показывает никакого вывода, а также не выдает ошибку.Что я делаю не так, что может вызвать что-то вроде этого?

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

Вместо того, что вы в настоящее время делаете, начните с этого, а затем помассируйте в соответствии:

$ cat tst.awk
BEGIN { FS="[. ]"; OFS=", " }
{ vals[$11][$13] = $NF }
END {
    for (id in vals[6]) {
        sep = ""
        for (attr in vals) {
            printf "%s%s", sep, vals[attr][id]
            sep = OFS
        }
        print ""
    }
}

$ awk -f tst.awk file
1, 1, "CyanInkCartridge", 15, 1300, 1300
1, 2, "MagentaInkCartridge", 15, 1300, 780
1, 3, "YellowInkCartridge", 15, 1300, 780
1, 4, "MattBlackInkCartridge", 15, 1300, 780
1, 5, "MattBlackInkCartridge", 15, 1300, 780
1, 6, "BlackInkCartridge", 15, 1300, 1300
1, 7, "WasteInkTank", 15, 10000, 4000

Вышеприведенное использует GNU awk для истинных многомерных массивов, легко настраиваемых для любого awk, если это необходимо.

2 голосов
/ 29 апреля 2019

Проблема в том, что первая часть всех ваших строк соответствует /.*\.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...