Подтвердить что ты не робот

Правые выровняющие/пэды числа в bash

Каков наилучший способ ввода чисел при печати вывода в 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. И я буду знать верхнюю границу количества слов в файле (просто не сейчас).

4b9b3361

Ответ 1

Для bash используйте команду printf с флажками выравнивания.

Например:

 printf '%7s' 'hello'

Печать

   hello

(представьте себе 2 пробела)

Теперь используйте свое усмотрение для своей проблемы.

Ответ 2

Вот немного более ясный пример:

#!/bin/bash
for i in 21 137 1517
do
    printf "...%5d ...\n" "$i"
done

Выдает:

...   21 ...
...  137 ...
... 1517 ...

Ответ 3

Если вы хотите динамически менять ширину, вы можете использовать функцию printf '% * s'

printf '%*s' 20 hello

который печатает

               hello

Ответ 4

Комбинация ответов выше, которая удаляет стробированную строку длиной 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 ...