LINUX.ORG.RU

Вывод скрипта в табличном виде

 


0

1

Появилась желание выводить выхлоп скрипта в табличном виде. Например щас:

/var/db/pkg/perl-5.14.2_2               [Okay]
/var/db/pkg/pkg_cutleaves-20090810              [Okay]
/var/db/pkg/pkgconf-0.8.9               [Okay]
/var/db/pkg/png-1.5.12          [Okay]
/var/db/pkg/popt-1.16           [Okay]
/var/db/pkg/portaudit-0.6.0             [Okay]
/var/db/pkg/portmaster-3.14             [Okay]
/var/db/pkg/schroedinger-1.0.11         [Okay]
/var/db/pkg/spidermonkey17-1.7.0_1              [Okay]
/var/db/pkg/sqlite3-3.7.14              [Okay]
/var/db/pkg/sudo-1.8.6.p3_1             [Okay]
/var/db/pkg/taglib-1.8          [Okay]
/var/db/pkg/talloc-2.0.7                [Okay]
/var/db/pkg/tdb-1.2.9,1         [Okay]
/var/db/pkg/unzip-6.0_1         [Okay]
/var/db/pkg/uptimed-0.3.16_2            [Okay]
/var/db/pkg/x264-0.125.2201             [Okay]
/var/db/pkg/xvid-1.3.2,1                [Okay]

а я хотеть:

/var/db/pkg/perl-5.14.2_2               [Okay]
/var/db/pkg/pkg_cutleaves-20090810      [Okay]
/var/db/pkg/pkgconf-0.8.9               [Okay]
/var/db/pkg/png-1.5.12                  [Okay]
/var/db/pkg/popt-1.16                   [Okay]
/var/db/pkg/portaudit-0.6.0             [Okay]
/var/db/pkg/portmaster-3.14             [Okay]
/var/db/pkg/python27-2.7.3_3            [Okay]
/var/db/pkg/rsync-3.0.9_2               [Okay]
/var/db/pkg/samba36-3.6.7               [Okay]
/var/db/pkg/schroedinger-1.0.11         [Okay]
/var/db/pkg/spidermonkey17-1.7.0_1      [Okay]
/var/db/pkg/sqlite3-3.7.14              [Okay]
/var/db/pkg/sudo-1.8.6.p3_1             [Okay]
/var/db/pkg/taglib-1.8                  [Okay]
/var/db/pkg/talloc-2.0.7                [Okay]
/var/db/pkg/tdb-1.2.9,1                 [Okay]
/var/db/pkg/unzip-6.0_1                 [Okay]
/var/db/pkg/uptimed-0.3.16_2            [Okay]
/var/db/pkg/x264-0.125.2201             [Okay]
/var/db/pkg/xvid-1.3.2,1                [Okay]

Как сего добиться? Скрипт написан на shell.

Подскажите, пожалуйста.

★★★★★

column -t

c0@c4 ~$ echo 'var/db/pkg/perl-5.14.2_2               [Okay]
/var/db/pkg/pkg_cutleaves-20090810              [Okay]
/var/db/pkg/pkgconf-0.8.9               [Okay]
/var/db/pkg/png-1.5.12          [Okay]
/var/db/pkg/popt-1.16           [Okay]
/var/db/pkg/portaudit-0.6.0             [Okay]
/var/db/pkg/portmaster-3.14             [Okay]
/var/db/pkg/schroedinger-1.0.11         [Okay]
/var/db/pkg/spidermonkey17-1.7.0_1              [Okay]
/var/db/pkg/sqlite3-3.7.14              [Okay]
/var/db/pkg/sudo-1.8.6.p3_1             [Okay]
/var/db/pkg/taglib-1.8          [Okay]
/var/db/pkg/talloc-2.0.7                [Okay]
/var/db/pkg/tdb-1.2.9,1         [Okay]
/var/db/pkg/unzip-6.0_1         [Okay]
/var/db/pkg/uptimed-0.3.16_2            [Okay]
/var/db/pkg/x264-0.125.2201             [Okay]
/var/db/pkg/xvid-1.3.2,1                [Okay]' | column -t


var/db/pkg/perl-5.14.2_2            [Okay]
/var/db/pkg/pkg_cutleaves-20090810  [Okay]
/var/db/pkg/pkgconf-0.8.9           [Okay]
/var/db/pkg/png-1.5.12              [Okay]
/var/db/pkg/popt-1.16               [Okay]
/var/db/pkg/portaudit-0.6.0         [Okay]
/var/db/pkg/portmaster-3.14         [Okay]
/var/db/pkg/schroedinger-1.0.11     [Okay]
/var/db/pkg/spidermonkey17-1.7.0_1  [Okay]
/var/db/pkg/sqlite3-3.7.14          [Okay]
/var/db/pkg/sudo-1.8.6.p3_1         [Okay]
/var/db/pkg/taglib-1.8              [Okay]
/var/db/pkg/talloc-2.0.7            [Okay]
/var/db/pkg/tdb-1.2.9,1             [Okay]
/var/db/pkg/unzip-6.0_1             [Okay]
/var/db/pkg/uptimed-0.3.16_2        [Okay]
/var/db/pkg/x264-0.125.2201         [Okay]
/var/db/pkg/xvid-1.3.2,1            [Okay]

cx ★★ ()
Ответ на: комментарий от IPR

Тогда наверное костылять с printf и/или awk. Но может поехать. С помощью гугла:

echo 'var/db/pkg/perl-5.14.2_2               [Okay]
/var/db/pkg/pkg_cutleaves-20090810              [Okay]
/var/db/pkg/pkgconf-0.8.9               [Okay]
/var/db/pkg/png-1.5.12          [Okay]
/var/db/pkg/portaudit-0.6.0             [Okay]
/var/db/pkg/spidermonkey17-1.7.0_1              [Okay]
/var/db/pkg/sudo-1.8.6.p3_1             [Okay]
/var/db/pkg/taglib-1.8          [Okay]
/var/db/pkg/talloc-2.0.7                [Okay]
/var/db/pkg/tdb-1.2.9,1         [Okay]
/var/db/pkg/uptimed-0.3.16_2            [Okay]
/var/db/pkg/xvid-1.3.2,1                [Okay]' | while read a; do echo $a | awk '{ printf "%-40s %-40s\n", $1, $2}'; done

var/db/pkg/perl-5.14.2_2                 [Okay]                                  
/var/db/pkg/pkg_cutleaves-20090810       [Okay]                                  
/var/db/pkg/pkgconf-0.8.9                [Okay]                                  
/var/db/pkg/png-1.5.12                   [Okay]                                  
/var/db/pkg/portaudit-0.6.0              [Okay]                                  
/var/db/pkg/spidermonkey17-1.7.0_1       [Okay]                                  
/var/db/pkg/sudo-1.8.6.p3_1              [Okay]                                  
/var/db/pkg/taglib-1.8                   [Okay]                                  
/var/db/pkg/talloc-2.0.7                 [Okay]                                  
/var/db/pkg/tdb-1.2.9,1                  [Okay]                                  
/var/db/pkg/uptimed-0.3.16_2             [Okay]                                  
/var/db/pkg/xvid-1.3.2,1                 [Okay]
while read вставил только чтобы показать - работает line-by-line

cx ★★ ()
Ответ на: комментарий от cx

чем же printf костыль? он для того и создан, чтобы форматировать вывод.

silw ★★★★★ ()
Ответ на: комментарий от IPR

Беда, скрипт выводит построчно, не поможет, ибо придётся ждать полного вывода :(

unbuffer — позволяет избавиться от буферизации вывода. Обычно идёт в составе expect

i-rinat ★★★★★ ()
Ответ на: комментарий от cx

awk '{ printf «%-50s %-40s\n», $1, $2}'

Не мог бы разжевать мне эту строку? Совсем запутался.

P.S.: Всё работает, но интересно всё же как.

IPR ★★★★★ ()
Ответ на: комментарий от IPR

Не мог бы разжевать мне эту строку? Совсем запутался.

man printf:

             -       A minus sign `-' which specifies left adjustment of the
                     output in the indicated field;
//skip
     Field Width:
             An optional digit string specifying a field width; if the output
             string has fewer characters than the field width it will be
             blank-padded on the left (or right, if the left-adjustment indi-
             cator has been given) to make up the field width (note that a
             leading zero is a flag, but an embedded zero is part of a field
             width);

Итого в формате: первое поле - строка с левым выравниванием и шириной 50, второе поле - строка с левым выравниванием и шириной 40. Печатать первое и вторые поля исходной строки (man awk)

sergv ()
Ответ на: комментарий от IPR

Выше:

while read a; do echo $a | awk '{ printf "%-40s %-40s\n", $1, $2}'; done
а можно безо всякого awk:
while read A B ; do printf '%-40s %-40s\n' "${A}" "${B}" ; done

ABW ★★★★★ ()
Ответ на: комментарий от ABW

а можно безо всякого awk:

Отлично, так и сделаю.

IPR ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.