Изменить результаты grep для печати конкретного слова из строки соответствия - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть вывод grep, который выглядит следующим образом:

Path to log files = /data/db2inst1/NODE0000/SQL00001/LOGSTREAM0000/
Database is in write suspend state = YES
Path to log files = /data/db2inst1/NODE0001/SQL00001/LOGSTREAM0001/
Database is in write suspend state = NO

Я хочу изменить это следующим образом:

Node = NODE0000
Database is in write suspend state = YES
Node = NODE0001
Database is in write suspend state = NO

Возможно ли это?

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018
$  awk -F"/" '{if(NR!=1) if($1 ~ /Path to log files/) print $1,$4 ;else print ;else print "Node = "$4 }' temp
Node = NODE0000
Database is in write suspend state = YES
Path to log files =  NODE0001
Database is in write suspend state = NO
0 голосов
/ 28 сентября 2018

Использование sed (которое также может заменить вашу команду grep):

sed -n '/^Database is in write suspend state/p;
        /^Path to log files = /s|.*/.*\(NODE[0-9]\+\).*/$|Node = \1|p' file
0 голосов
/ 28 сентября 2018

Вам не нужно сохранять конвейеры grep, чтобы генерировать результат, который вы ищете.Awk немного мощнее, чем grep в том смысле, что позволяет вам выполнять преобразование текста, который вы сопоставили, что довольно мощно.Таким образом, все, что вам нужно для вашего примера будет

awk '/Path to log files/{match($0,/NODE([^/]+)/,a); printf "Node = NODE%s\n",a[1];next}
    /Database is in write suspend state/' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...