=
— это присвоение. Используйте ==
для сравнения значений. Вы получаете 1
, потому что, по сути, у вас есть $1 = ($2 && $3 = $4)
.
awk 'NF == 5 && $1 == $2 && $3 == $4 { print $1, $5 }' filename
Также обратите внимание, что ваши данные содержат 5 или 6 столбцов, а не 4 или 5, поэтому, возможно, вы хотели использовать
$ awk 'NF == 6 && $2 == $3 && $4 == $5 { print $1, $6 }' filename
343 test
565 testi
345 testin
NF
— это переменная awk
, которая содержит количество полей в текущей записи. Разделителем вывода по умолчанию(OFS
)является пробел, поэтому нет необходимости печатать явный пробел с print
.
Кроме того, если бы вы хотели напечатать явный пробел, это было бы более читабельно сделать
print $1 " " $6
вместо
print $1" "$6
awk
объединяет значения переменных и строк, когда они встречаются друг за другом. Пробелы между переменными и строками не имеют значения.
Жизненный цикл Kubernetes — хорошее решение для подобных проблем:
Крючки жизненного цикла контейнера
Это можно сделать с помощью тупой -инициализации.
Строить контейнеры, тупой -init обычно является хорошей практикой, имея дело, в частности, с зомби. В вашем случае это также позволит переназначить сигналы -.
В вашем Dockerfile должно быть что-то вроде
CMD ["dumb-init", "--rewrite", "15:28", "/app/start.sh"]
Проверьте с помощью kill -l
, SIGINT
должно быть число 15
.
Затем в стартовом сценарии вы можете перехватить сигналSIGWINCH
(28
):
#!/bin/sh
trap "cd /app ; catalina.sh stop" SIGWINCH
[your startup script]
exec $JAVA_HOME/bin/java...
редактировать, как я вижу, был принят другой ответ :конечно, хуки жизненного цикла контейнера могли бы звучать красиво.
С одной стороны, они существуют уже около года :могут оказаться непригодными для использования в зависимости от версии вашего кластера.
И тогда вы поймете, что они работают только при завершениях, управляемых API, что может быть проблемой.