Awk или аналогичная команда, чтобы получить последний столбец и выполнить с ним некоторые действия в Bash - PullRequest
0 голосов
/ 04 марта 2019

Я пишу скрипт для получения даты последнего обновления / патча на нескольких сотнях серверов.Не имея другого инструмента по разным причинам, я решил написать сценарий.На данный момент я использую следующую команду:

sudo yum history | grep [0-9] | grep -E 'Update|Install|U|I' | awk 'NR==1'

, которая дает мне первую строку с действием над ней.Но это только дает мне первую строчку, я играл с идеей взять первые 5 строк, но это может быть неприменимо к каждой ситуации.

sudo yum history | grep [0-9] | grep -E 'Update|Install|U|I' | awk 'NR>=1&&NR<=5'

Итак, я хотел бы проверить последний столбец или два, и если было обновлено или установлено более x пакетов, чтобы получить эту строку.

Вообще говоря, вывод истории yum:

18 | first last <username>      | 2018-08-30 19:41 | E, I, U        |   43 ss
17 | first last <username>      | 2018-07-10 15:28 | E, I, U        |  230 EE
16 | first last <username>      | 2018-04-25 20:08 | E, I, U        |   44 ss
15 | first last <username>      | 2018-01-30 20:57 | E, I, O, U     |  108 EE
14 | first last <username>      | 2018-01-30 20:39 | Install        |    4   

Проблема, с которой я сталкиваюсь, состоит в том, что последние два столбца могут различаться по положению в столбце, а последний столбец может быть просто числовымили он может содержать буквы или специальные символы.Я хочу игнорировать любой последний столбец, в котором есть любой символ, который не является числовым, и оценить, установлено ли в последнем столбце более 20 установленных или обновленных пакетов.Если в последнем столбце содержится более 20 пакетов, захватите эту строку и только эту строку.

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

используйте awk:

sudo yum history | awk -F ' *\\| *' '$4 ~ /\<(Install|Update|U|I)\>/ && $5 > 20'
0 голосов
/ 05 марта 2019

Используйте регулярное выражение, соответствующее номеру в последнем столбце.Чтобы напечатать все записи истории с> = 20 изменениями:

sudo yum history | \
    perl -ne '/\| *(\d+)[^\|]*$/ and $1>=20 and print($_)'

Of - если вы хотите, чтобы отметка времени совпадала с записями истории:

sudo yum history | \
    perl -ne '
        @col=split(/\|/);
        $col[4]=~/^ *(\d+)/ and $1>=20 and print($col[2],"\n")'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...