Форматировать вывод и столбцы

Вопрос или проблема

В Linux в Bash в цикле for я делаю:

... ; do echo "$i --> $i-new" ; ...

Вывод будет чем-то вроде этого:

file1  -->  file1-new
file2  -->  file2-new
...
file9  -->  file9-new
file10  -->  file10-new
file11  -->  file11-new

как сделать вывод таким:

file1   -->   file1-new
file2   -->   file2-new
...
file9   -->   file9-new
file10  -->  file10-new
file11  -->  file11-new

?

for i in file{1..11}; do
    printf '%s\t-->\t%s\n' "${i}" "${i}-new"
done | column -t -d -s$'\t' -R3
  • printf '%s\t-->\t%s\n' "${i}" "${i}-new": выводит три столбца, разделенных табуляцией, для, соответственно, fileN, --> и fileN-new

В column:

  • -t: создать таблицу, с колонками, разделенными двумя пробелами
  • -d: не выводить заголовок таблицы
  • -s$'\t': считать, что входные элементы разделены табуляцией
  • -R3: выровнять содержимое третьего столбца по правому краю
% for i in file{1..11}; do printf '%s\t-->\t%s\n' "${i}" "${i}-new"; done | column -t -d -s$'\t' -R3
file1   -->   file1-new
file2   -->   file2-new
file3   -->   file3-new
file4   -->   file4-new
file5   -->   file5-new
file6   -->   file6-new
file7   -->   file7-new
file8   -->   file8-new
file9   -->   file9-new
file10  -->  file10-new
file11  -->  file11-new

.

Ответ или решение

Форматирование вывода и колонок в Bash для Linux

При работе с Bash в Linux часто возникает необходимость в форматировании вывода, чтобы сделать его более читаемым и структурированным. Рассмотрим, как можно достичь желаемого выравнивания колонок при помощи цикла for.

Пример задачи

Допустим, вам нужно вывести список файлов с их новыми именами в следующем формате:

file1   -->   file1-new
file2   -->   file2-new
...
file9   -->   file9-new
file10  -->  file10-new
file11  -->  file11-new

Решение

Для достижения этого можно использовать команду printf вместе с утилитой column. Вот как это делается:

for i in file{1..11}; do
    printf '%s\t-->\t%s\n' "${i}" "${i}-new"
done | column -t -d -s$'\t' -R3

Объяснение кода

  1. Цикл for: В этом цикле мы последовательно перебираем файлы от file1 до file11.

  2. Команда printf:

    • Форматирование: '%s\t-->\t%s\n' — здесь мы указываем, что нужно вывести строку в формате: имя файла, стрелка, имя нового файла, разделенные табуляцией (\t).
    • ${i} — переменная, содержащая текущее имя файла.
    • ${i}-new — переменная для имени нового файла.
  3. Конвейер (Pipe): Вывод, сгенерированный командой printf, передается через конвейер в команду column.

  4. Команда column:

    • -t — создаёт таблицу, выравнивая колонки по пробелам.
    • -d — указывает, что не требуется выводить заголовок таблицы.
    • -s$'\t' — задаёт символ разделителя как табуляцию.
    • -R3 — выравнивает текст в третьем столбце (имя нового файла) по правому краю.

Результат

После выполнения приведённого выше скрипта вы получите аккуратно отформатированный вывод, как показано выше. Это значительно упрощает восприятие информации и делает её более структурированной.

Заключение

Форматирование вывода в Bash — важный аспект, который помогает в визуализации данных. Использование printf и column позволяет добиться нужного вида и выравнивания колонок, облегчая чтение и восприятие информации. Этот метод является полезным инструментом для разработчиков и системных администраторов, работающих с большими объемами данных в командной строке.

При необходимости можно адаптировать данные команды для работы с различными типами данных и дополнительными форматами вывода, что увеличит гибкость и эффективность как скриптов, так и командной строки в целом.

Оцените материал
Добавить комментарий

Капча загружается...