Ответ Кусалананды намного лучше, чем я думал. Одна вещь, которую я имел в своей конструкции, — это условие для усечения столбца, если он слишком длинный. Я смог реализовать это с помощью его решения :
.ВХОД
component_name : TEZ_CLIENT recovery_enabled : true
component_name : WEBHCAT_SERVER recovery_enabled : true
component_name : YARN_CLIENT recovery_enabled : true
component_name : ZKFC recovery_enabled : true
component_name : ZOOKEEPER_CLIENT recovery_enabled : true
component_name : ZOOKEEPER_SERVER recovery_enabled : true
component_name : ZOOKEEPER_SERVER_1234567890 recovery_enabled : true
СЦЕНАРИЙ
# /bin/bash -
#
INPUT_FILE=$HOME/Documents/scripts/shell/testing/input
IFS= mapfile -t STATUS_ARRAY < <(cat "$INPUT_FILE" | tr -s " ")
for line in "${STATUS_ARRAY[@]}"; do
COMPONENT_NAME=$(echo "$line" | awk '{print $3}')
if [[ "${#COMPONENT_NAME}" -gt "16" ]]; then
echo "$line" | sed "s/${COMPONENT_NAME}/${COMPONENT_NAME:0:16}../" | awk '{printf("%s %s %-20s %20s %s %s\n", $1, $2, $3, $4, $5, $6)}'
else
echo "$line" | awk '{printf("%s %s %-20s %20s %s %s\n", $1, $2, $3, $4, $5, $6)}'
fi
done
Мой скрипт извлекает данные из файла, но вы, скорее всего, также можете установить файл карты с помощью echo $status | grep..
илиecho $status | jq..
ВЫХОД
component_name : TEZ_CLIENT recovery_enabled : true
component_name : WEBHCAT_SERVER recovery_enabled : true
component_name : YARN_CLIENT recovery_enabled : true
component_name : ZKFC recovery_enabled : true
component_name : ZOOKEEPER_CLIENT recovery_enabled : true
component_name : ZOOKEEPER_SERVER recovery_enabled : true
component_name : ZOOKEEPER_SERVER.. recovery_enabled : true
awk '$0>1 { $0=NR==1?0.1:prev }{ prev=$0; print }' file
Если текущая строка больше 1
, присвойте 0.1
текущей строке, если номер строки 1
, или предыдущее значение в противном случае. Затем присвойте текущую строку переменной prev
и напечатайте текущую строку.