Использование AWK
hpasmcli -s "show dimm" | awk '
/^Module/ { m = m sprintf("%4s", $3) }
/^Status/ { s = s sprintf("%4s", $2) }
END { print "Module:" m "\n" "Status:" s }'
Пример вывод:
Module: 1 3 6 8 1 3 6 8
Status: Ok Ok Ok Ok Ok Ok Ok Ok
блоки в фигурных скобках после регулярных выражений /^Module/
и /^Status/
выполняется, когда текущая запись (строка) совпадает с соответствующим регулярным выражением. Значения собираются в переменные m
и s
. На END
обе переменные печатаются на стандартный вывод.
sprintf
функции возвращают строки, проложенные до указанной ширины (4).
В качестве альтернативы, разделить записи с двоеточием, используя -F:
вариант. Но тогда вам нужно будет обрезать значения с помощью gsub
функции, например:
hpasmcli -s "show dimm" | awk -F: '
/^Module/ { gsub(/ +/, "", $2); m = m sprintf("%4s", $2) }
/^Status/ { gsub(/ +/, "", $2); s = s sprintf("%4s", $2) }
END { print "Module:" m "\n" "Status:" s }'
Использование Perl
hpasmcli -s "show dimm" | perl -e '
while (<>) {
push @m, m/:\s*(\S+)$/ if /^Module/;
push @s, m/:\s*(\S+)$/ if /^Status/;
}
print "Module: ", join("", map { sprintf "%4s", $_ } @m), "\n";
print "Status: ", join("", map { sprintf "%4s", $_ } @s), "\n";'
Цикл while
читает входную строку. Если строка начинается с «Module», тогда значение извлекается из строки с использованием выражения m/:\s*(\S+)$/
. Соответствующая группа непространственных символов (\S+)
добавляется к @m
или @s
массивам. Наконец, элементы массива соединяются и печатаются на стандартный вывод.
hpasmcli, я понимаю вашу ситуацию. Удачи. – phoxis