URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 96203
[ Назад ]

Исходное сообщение
"Bash. Как добавить строку к выводу?"

Отправлено Dark Smoke , 04-Июл-15 23:37 
Добрый день

Стала перед мною, трудная, для меня задача. Надо к выводящимся результатам добавить строку.

Пример то что вылазит и к чему надо добавить строку

{
    "data" : [
        {
            "{#NAME}" : "admin",
            "sizeOnDisk" : 163840,
            "empty" : false
        },
        {
            "{#NAME}" : "blacklist",
            "sizeOnDisk" : 7831552,
            "empty" : false
        },
        {
            "{#NAME}" : "eantifraud",
            "sizeOnDisk" : 11108495360,
            "empty" : false
        }
        ],
    "totalSize" : 27484880896,
    "ok" : 1
}

Хочу что бы "totalSize" : 27484880896, получился вместе с остальними JSONами
Так


{
    "data" : [
        {
            "{#NAME}" : "admin",
            "sizeOnDisk" : 163840,
            "empty" : false
        },
        {
            "{#NAME}" : "base2",
            "sizeOnDisk" : 7831552,
            "empty" : false
        },
        {
            "{#NAME}" : "base",
            "sizeOnDisk" : 11108495360,
            "empty" : false
        },
        {
            "{#NAME}" : "totalSize",
            "sizeOnDisk" : 27484880896,
        }
        ],
    "totalSize" : 27484880896,
    "ok" : 1
}


Кстати не важно будет он отображаться дальше или нет, главное что бы добавился ко всем

        {
            "{#NAME}" : "totalSize",
            "sizeOnDisk" : 27484880896,
        }

Возможно такое башем решить?


Содержание

Сообщения в этом обсуждении
"Bash. Как добавить строку к выводу?"
Отправлено Pahanivo , 05-Июл-15 12:39 
> Возможно такое башем решить?

возможно, но ИМХО лучше перлом
и почему нельзя сразу вывести в нужном формате?



"Bash. Как добавить строку к выводу?"
Отправлено михалыч , 05-Июл-15 20:37 
> Возможно такое башем решить?

возможно в этой (нашей?) жизни всё возможно!?


#!/bin/sh

while read line; do
    if [ "${line%% *}" = "\"totalSize\"" ]; then
        tmp="${line##* }"
        sub="${tmp%,}"
    fi
done < text


while read line; do
    if [ "${line}" = "}" ]; then
        line="${line},"
    fi
    if [ "${line}" = "]," ]; then
        echo -e "{\n"{#NAME}" : "totalSize",\n"sizeOnDisk" : ${sub}\n}"
    fi
    echo ${line}
done < text


форматирование теряется, но если не принципиально, то...

"Bash. Как добавить строку к выводу?"
Отправлено Dark Smoke , 05-Июл-15 21:19 
Предложили такое решение.
ИМХО, одна строка

sed '/],/s//{/;/"totalSize"/{s//\t    "{#NAME}" : &,\n\t    "sizeOnDisk"/;s/,$/\n\t}\n\t],/}'


"Bash. Как добавить строку к выводу?"
Отправлено Аноним , 05-Июл-15 23:23 
> Предложили такое решение.
> ИМХО, одна строка
> sed '/],/s//{/;/"totalSize"/{s//\t    "{#NAME}" : &,\n\t    "sizeOnDisk"/;s/,$/\n\t}\n\t],/}'

ну так не честно, михалыч, вон старался, чистый bash, а вы - sed, еще-б perlre... подстава.


"Bash. Как добавить строку к выводу?"
Отправлено Pahanivo , 06-Июл-15 10:17 
> Предложили такое решение.
> ИМХО, одна строка

fix: ИМХО костыль :)