Как получить третью строку из STDOUT? - PullRequest
0 голосов
/ 16 июня 2020

У меня есть STDOUT в виде таблицы со следующим содержанием:

$kubectl get postgresql

NAME                   TEAM        VERSION   PODS   VOLUME   CPU-REQUEST   MEMORY-REQUEST   AGE     STATUS
acid-minimal-cluster   acid        12        2      1Gi                                     2d16h   SyncFailed
acid-userdb            acid        12        2      5Gi      100m          100Mi            2d16h   SyncFailed
databaker-userdb       databaker   12        2      2Gi      100m          100Mi            2d16h   SyncFailed
databaker-users-db     databaker   12        2      2Gi      100m          100Mi            2d15h   Running

, и я хотел бы получить строку с NAME = *users-db и STATUS = Running, то есть последняя строка.

Я пытаюсь проверить, была ли база данных успешно развернута или нет.

Перед этим блоком кодирования:

echo "Check if database $DB_NAME is correctly deployed"
for i in {1..3}; do
  if [ kubectl get postgresql $DB_NAME | egrep -q "$DB_NAME|Running" ] ; then
    echo "DB $DB_NAME successfully deployed"
    break
  elif [ $i -eq 3 ]; then
    echo "DB $DB_NAME not successfully deployed"
    exit 1
  fi
  sleep 3
done

Сначала я должен выбрать правую строку.

Как написать сценарий bash, чтобы получить соответствующую строку с ИМЯ = *users-db и СТАТУС = Running?

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Попробуйте

awk '$1~/users-db$/ && $9=="Running"'

$1 <- Первое поле <br>$9 <- Последнее поле <br>\ \ <- Используется для соответствия регулярному выражению </p>

1 голос
/ 16 июня 2020
kubectl get postgresql | sed -n '/databaker-userdb/p'

kubectl get postgresql | sed -n '3p'

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

...