Назад | Перейти на главную страницу

Как найти в строке, отформатированной как таблица с пробелами, все значения, равные для всех столбцов?

Вопрос исходит из вопроса: https://github.com/kubernetes/kubectl/issues/717

Kubectl возвращает информацию в виде такой таблицы:

$ kubectl get replicasets -n kube-system

NAMESPACE     NAME                       DESIRED   CURRENT   READY   AGE
kube-system   datadog-657c65b75c         2         2         2       11d
kube-system   kube-ops-view-5d8df57fc    1         1         0       33d

Чтобы найти все отклонения в выводе без использования средства форматирования json, я могу выполнить команду:

grep -v '0         0         0\|1         1         1\|2         2         2\|3         3         3\|4         4         4\|5         5         5'

Какая команда grep может охватить все возможные случаи? Цель состоит в том, чтобы найти любые ReplicaSets, где ЖЕЛАТЕЛЬНЫЙ! = ТЕКУЩИЙ, ТЕКУЩИЙ! = ГОТОВ или ЖЕЛАТЕЛЬНЫЙ! = ГОТОВ.

grep не очень хорошо, если ваш шаблон не является ни фиксированной строкой, ни регулярным выражением.

Если вы хотите, чтобы все наборы реплик, где числа «желаемый», «текущий» и «готовый» не совпадали, используйте лучший язык сопоставления с образцом, например awk:

   kubectl get replicasets -n kube-system | awk '$3!=$4 || $4!=$5 {print $0}'

который должен возвращать как заголовок, так и любые несовместимые наборы реплик.

Вы можете опустить заголовок, используя:

    awk 'NR!=1 && ($3!=$4 || $4!=$5)  {print $0 }'       

Согласованные наборы реплик будут перечислены с:

   awk '$3==$4 && $4==$5 {print $0}'