переписать значения столбца, чтобы получить значение предыдущей строки, если оно превышает число 1

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

.

ВХОД

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
0
18.11.2019, 14:55
1 ответ
awk '$0>1 { $0=NR==1?0.1:prev }{ prev=$0; print }' file

Если текущая строка больше 1, присвойте 0.1текущей строке, если номер строки 1, или предыдущее значение в противном случае. Затем присвойте текущую строку переменной prevи напечатайте текущую строку.

2
28.01.2020, 02:29

Теги

Похожие вопросы