sed
идеально подходит для этой задачи. Просто немного подправив ваш код sed, мы имеем:
sed -E '
s/^([a-z][^ ]*) ([0-9]+)/\2 \1\n\1/
/\n/P;D
' filename.txt
Выход:
17 key1
89 key1
52 key1
5 key2
189 key2
6 key2
3 key2
5 key2
21 key2
Пояснение:
global /g flag
. \n
после операции переворота, так что мы можно использовать команду P
, которая печатает только до первой новой строки в пространстве шаблонов. P
с помощью /\n/
, чтобы избежать бесконечного цикла. D
удаляет до первой новой строки в пространстве шаблонов и с тем, что осталось от пространства шаблонов, возвращает управление в начало сценария. IOW, то, что вы сделали, предоставило неявный механизм цикла. s/// --- P --- D --- s/// --- P --- D...........
. sed
начинается новый цикл чтения и дальше вы уже знаете что происходит....ХТХ. Я нашел одно решение для одного из моих vio. Но я все еще не могу удалить оповещение для другого vio, у которого может быть проблема с прошивкой.
/usr/lpp/diagnostics/bin/usysfault -s normal
для возврата индикатора системного внимания в нормальное состояние
/usr/lpp/diagnostics/bin/usysfault -t
для просмотра списка доступных аппаратных индикаторов
Или с помощью команды diag->