2016-06-22 3 views
0

Я хочу форматировать вывод двух функций рядом.Формат вывода двух функций бок о бок

Вот пример, на котором я сейчас работаю, включая мою неудачную попытку внизу.

#!/bin/bash 

status_awsomeproject1() { 
    echo "\e[0;33m\n################ Status awsomeproject1 ################\e[0;37m" 
    cd /home/joaoc/Projects/awsomeproject1 
    git status 
    cd vendor/libs 
    echo "\e[0;33m\n################ Status awsomeproject1-> lib-1 ################\e[0;37m" 
    git -C lib-1 status 
    echo "\e[0;33m\n################ Status awsomeproject1-> lib-2 ################\e[0;37m" 
    git -C lib-2 status 
    echo "\e[0;33m\n################ Status awsomeproject1-> lib-3 ################\e[0;37m" 
    git -C lib-3 status 
} 

status_awsomeproject2() { 
    echo "\e[0;33m\n################ Status awsomeproject2 ################\e[0;37m" 
    cd /home/joaoc/Projects/awsomeproject2 
    git status 
    cd vendor/libs 
    echo "\e[0;33m\n################ Status awsomeproject2-> lib-1 ################\e[0;37m" 
    git -C lib-1 status 
    echo "\e[0;33m\n################ Status awsomeproject2-> lib-2 ################\e[0;37m" 
    git -C lib-2 status 
    echo "\e[0;33m\n################ Status awsomeproject2-> lib-3 ################\e[0;37m" 
    git -C lib-3 status 
} 


echo "$(status_awsomeproject1) || $(status_psp)" | column -t 

Команда wrap() выполняет то, что мне нужно, но делает это только для одного столбца.

Как достичь желаемого результата?

Спасибо

Редактировать, чтобы обеспечить минимальный рабочий пример:

#!/bin/bash 

string_output1() { 
    echo "################ Example long multi-line string ################\n\n" 
    echo "################ Example long multi-line string ################\n\n" 
    echo "################ Example long multi-line string ################\n\n" 
    echo "################ Example long multi-line string ################\n\n" 
    echo "################ Example long multi-line string ################\n\n" 
} 

string_output2() { 
    echo "################ Example long multi-line string ################\n\n" 
    echo "################ Example long multi-line string ################\n\n" 
    echo "################ Example long multi-line string ################\n\n" 
    echo "################ Example long multi-line string ################\n\n" 
    echo "################ Example long multi-line string ################\n\n" 
    echo "################ Example long multi-line string ################\n\n" 
} 


echo "$(string_output1) || $(string_output2)" | column -t 
+1

Добавлен пример. Спасибо –

ответ

1

Если бы вы могли использовать временные файлы, сделайте это, как показано ниже:

status_awsomeproject1>tmp1 
status_awsomeproject2>tmp2 
paste tmp1 tmp2 
rm tmp1 tmp2 # Remove the temporary files after use 

Если оболочка поддерживает [ process substitution ] вы можете упростить вышеуказанное:

paste -d^ <(status_awsomeproject1) <(status_awsomeproject2) 

Редактировать

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

paste -d^ <(status_awsomeproject1) <(status_awsomeproject2) | \ 
awk 'BEGIN{FS="\^"}{printf "%-10s %s\n",$1,$2}' 2>/dev/null 

Сначала вы должны найти подходящий разделитель, который имеет меньше/нет шансов появиться на выходе из функции. Я выбрал ^. Затем используйте разделитель как разделитель полей awk и используйте ширину ширины awk printf.


Примечание:
Я поставил awk printf ширину до 10, но вы должны изменить его в соответствии с ожидаемой продолжительности выхода из функции. Пробная и ошибка, но nbd.

+1

@fedorqui: Спасибо, обновлено :-) – sjsam

+1

Ваше описание неверно! замещение процесса ** не будет ** создавать временный файл! – hek2mgl

+0

@ hek2mgl: Я только что сказал 'появляются'. Пожалуйста, объясни. – sjsam

Смежные вопросы