Ответ 1
Для bash используйте команду printf
с флажками выравнивания.
Например:
printf '%7s' 'hello'
Печать
hello
(представьте себе 2 пробела)
Теперь используйте свое усмотрение для своей проблемы.
Каков наилучший способ ввода чисел при печати вывода в bash, чтобы номера были выровнены по экрану справа. Итак:
00364.txt with 28 words in 0m0.927s
00366.txt with 105 words in 0m2.422s
00367.txt with 168 words in 0m3.292s
00368.txt with 1515 words in 0m27.238
Должна быть напечатана следующим образом:
00364.txt with 28 words in 0m0.927s
00366.txt with 105 words in 0m2.422s
00367.txt with 168 words in 0m3.292s
00368.txt with 1515 words in 0m27.238
Я печатаю их по строкам из цикла for. И я буду знать верхнюю границу количества слов в файле (просто не сейчас).
Для bash используйте команду printf
с флажками выравнивания.
Например:
printf '%7s' 'hello'
Печать
hello
(представьте себе 2 пробела)
Теперь используйте свое усмотрение для своей проблемы.
Вот немного более ясный пример:
#!/bin/bash
for i in 21 137 1517
do
printf "...%5d ...\n" "$i"
done
Выдает:
... 21 ...
... 137 ...
... 1517 ...
Если вы хотите динамически менять ширину, вы можете использовать функцию printf '% * s'
printf '%*s' 20 hello
который печатает
hello
Комбинация ответов выше, которая удаляет стробированную строку длиной 5 строк.
VALUES=( 21 137 1517 2121567251672561 )
MAX=1
# Calculate the length of the longest item in VALUES
for i in "${VALUES[@]}"; do
[ ${#i} -gt ${MAX} ] && MAX=${#i}
done
for i in "${VALUES[@]}"; do
printf "... %*s ...\n" $MAX "$i"
done
Результат:
... 21 ...
... 137 ...
... 1517 ...
... 2121567251672561 ...