Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Bash: Justify текст  (Прочитано 1763 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Nikshimi

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Bash: Justify текст
« : 11 Октября 2014, 22:44:29 »
Есть ли команда в баше, чтобы централизованный текст преобразовывало в колонку с определенной шириной? Заранее спасибо
« Последнее редактирование: 11 Октября 2014, 23:58:39 от Nikshimi »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Bash: Justify текст
« Ответ #1 : 12 Октября 2014, 00:57:35 »
Что значит "централизованный"? Лучше бы пример привели: исходный текст и что надо получить. А так вообще fold.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Nikshimi

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Bash: Justify текст
« Ответ #2 : 12 Октября 2014, 13:47:33 »
Нужно получить center justify text. Грубо говоря нужно любой текст введенный в терминале преобразовать в форму колонки по центру - это и будет justify text

сделать по центру текст можно так: printf "%*s\n" $(((${#title}+$COLUMNS)/2)) "$title".
Теперь надо чтобы в одной строке было максимум 10 символов например, а следующую печатало прямо под предыдущей. Это и будет колонка.

Если дописать | fold -w10 , то текст появляется по левому краю, а мне надо по центру =(

Пример:
Мне надо получить Centered Left-Justified Text


Пользователь решил продолжить мысль 12 Октября 2014, 16:20:22:
Команда fold делает то что нужно, вот только она делает колонку текста слева. Есть способ, чтобы сделать её по центру?
« Последнее редактирование: 12 Октября 2014, 16:20:23 от Nikshimi »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Bash: Justify текст
« Ответ #3 : 12 Октября 2014, 16:52:39 »
Код: (bash) [Выделить]
WIDTH=60
par "${WIDTH}j" | sed "s/^/$(printf %-$(((COLUMNS-WIDTH)/2))s)/"

Оффлайн Nikshimi

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Bash: Justify текст
« Ответ #4 : 12 Октября 2014, 17:12:38 »
Код: (bash) [Выделить]
WIDTH=60
par "${WIDTH}j" | sed "s/^/$(printf %-$(((COLUMNS-WIDTH)/2))s)/"

не очень понятно к чему это. И пишет что команды par нету.
Я пытаюсь сделать через терминал, без программ.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Bash: Justify текст
« Ответ #5 : 12 Октября 2014, 17:23:46 »
И пишет что команды par нету.
Всё есть в репах.

Оффлайн Nikshimi

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Bash: Justify текст
« Ответ #6 : 12 Октября 2014, 17:34:00 »
И пишет что команды par нету.
Всё есть в репах.
что такое репы? Я только недавно начал изучать и знаю только самые основы =).

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Bash: Justify текст
« Ответ #7 : 12 Октября 2014, 17:37:20 »
sudo apt-get install par

Оффлайн Nikshimi

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Bash: Justify текст
« Ответ #8 : 12 Октября 2014, 17:43:47 »

А без этого никак не обойтись? Мне просто надо будет линукс ось качать , ибо я пишу на терминале, подключенном удаленно к компу. (

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Bash: Justify текст
« Ответ #9 : 12 Октября 2014, 17:57:29 »
Решение рабочее.
par есть в репозиториях всех популярных дистрибутивов.

Оффлайн Nikshimi

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Bash: Justify текст
« Ответ #10 : 12 Октября 2014, 18:33:39 »
может ещё как-нибудь можно? ) И в таком случае это в терминале вводить, да?

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Bash: Justify текст
« Ответ #11 : 12 Октября 2014, 18:36:43 »
Может и можно, но нет никакого смысла изобретать велосипед, т.к. есть готовое рабочее решение.

Оффлайн Nikshimi

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Bash: Justify текст
« Ответ #12 : 12 Октября 2014, 18:47:02 »
Может и можно, но нет никакого смысла изобретать велосипед, т.к. есть готовое рабочее решение.
в таком случае не подскажите online terminal, в котором это бы работало ? )

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Bash: Justify текст
« Ответ #13 : 12 Октября 2014, 19:00:54 »
Любой VPS с Ubuntu/Debian/Fedora/CentOS/etc.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Bash: Justify текст
« Ответ #14 : 12 Октября 2014, 19:24:51 »
Поменять местами fold и printf
Код: (bash) [Выделить]
#!/bin/bash
#USAGE: cat text_file | script_name.sh number_of_columns

function center_line() {
while read
do
  printf "%*s\n" $(((${#REPLY}+$1)/2)) "$REPLY"
done
}
fold -sw $1 | center_line
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.038 секунд. Запросов: 25.