Вопрос или проблема
В 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
Объяснение кода
-
Цикл
for
: В этом цикле мы последовательно перебираем файлы отfile1
доfile11
. -
Команда
printf
:- Форматирование:
'%s\t-->\t%s\n'
— здесь мы указываем, что нужно вывести строку в формате: имя файла, стрелка, имя нового файла, разделенные табуляцией (\t
). ${i}
— переменная, содержащая текущее имя файла.${i}-new
— переменная для имени нового файла.
- Форматирование:
-
Конвейер (Pipe): Вывод, сгенерированный командой
printf
, передается через конвейер в командуcolumn
. -
Команда
column
:-t
— создаёт таблицу, выравнивая колонки по пробелам.-d
— указывает, что не требуется выводить заголовок таблицы.-s$'\t'
— задаёт символ разделителя как табуляцию.-R3
— выравнивает текст в третьем столбце (имя нового файла) по правому краю.
Результат
После выполнения приведённого выше скрипта вы получите аккуратно отформатированный вывод, как показано выше. Это значительно упрощает восприятие информации и делает её более структурированной.
Заключение
Форматирование вывода в Bash — важный аспект, который помогает в визуализации данных. Использование printf
и column
позволяет добиться нужного вида и выравнивания колонок, облегчая чтение и восприятие информации. Этот метод является полезным инструментом для разработчиков и системных администраторов, работающих с большими объемами данных в командной строке.
При необходимости можно адаптировать данные команды для работы с различными типами данных и дополнительными форматами вывода, что увеличит гибкость и эффективность как скриптов, так и командной строки в целом.