zaLinux.ru

Как добавить нули до определённого размера строки


Иногда необходимо привести строки или числа разной длины к определённому стандарту, например, сделать так, чтобы они содержали одинаковое количество символов. В этом случае, если строка короче необходимой длины, вначале нужно добавить нули. Данная статья опишет, как это сделать. Показанные ниже способы в большей части одинаково работают как для чисел, так и для не-числовых строк, длину которых нужно дополнить до одинакового размера.

С помощью awk и printf

Имеется тестовый файл testfile:

cat testfile

Со следующим содержимым:

235
25
1
963258
45
1356924

Тогда команда для дополнения нулей ко всем числам до 7 символов:

awk '{printf("%07d\n", $1)}' testfile

Вывод:

0000235
0000025
0000001
0963258
0000045
1356924

Количество нулей указывается во фрагменте «%07d», чтобы изменить их количество, поменяйте цифру 7 на любую другую, например, чтобы увеличить до 8 символов:

awk '{printf("%08d\n", $1)}' testfile

Чтобы увеличить до 12 символов, заполнив недостающее нулями:

awk '{printf("%012d\n", $1)}' testfile

Связанная статья: Инструкция по использованию printf в Bash для форматирования и вывода данных

С помощью PERL

Заполнение строки нулями до определённого размера с помощью PERL:

perl -ne 'printf("%07d\n", $_)' testfile

Как и в предыдущем разделе, можно указать любое количество символов, до которых нужно заполнить нули:

perl -ne 'printf("%014d\n", $_)' testfile

Универсальный способ

Рассмотренные выше способы хотя и работают хорошо с числами до определённой длины (например, они не будут работать с цифрами, содержащими большое количество символов — больше ≈ 30 символов). К тому же, при попытке использовать другие символы, кроме нулей, могут возникнуть проблемы.


Следующим способ чуть сложнее, но является абсолютно универсальным:

  • позволяет работать с цифрами и строками любой длины
  • позволяет использовать не только числа, но и произвольные строки
  • вместо нулей можно указать любые цифры и символы

Следующий пример прочитает содержимое файла testfile и дополнит каждую строку до 10 нулей:

cat testfile | while read -r line ; do echo "0000000000$line" | rev | cut -c 1-10 | rev; done

Чтобы увеличить количество символов, отредактируйте 0000000000 (впишите любое количество нулей, который больше длины, требуемой вам) и отредактируйте опцию программы cut: -c 1-10 (вместо 10 укажите нужное количество символов).

К примеру, теперь мне нужно увеличить строку до 40 символов, заполнив пробелы нулями:

cat testfile | while read -r line ; do echo "0000000000000000000000000000000000000000$line" | rev | cut -c 1-40 | rev; done


Или вместо нулей я хочу использовать, допустим, символ "A":

cat testfile | while read -r line ; do echo "AAAAAAAAAA$line" | rev | cut -c 1-10 | rev; done

Чуть отредактировав команду, можно использовать, допустим, символы табуляции:

cat testfile | while read -r line ; do echo -e "\t\t\t$line" | rev | cut -c 1-10 | rev; done

Обратите внимание, что к команде echo добавлена опция -e, а символы табуляции обозначаются как \t.

Вместо нулей также можно использовать пробелы:

cat testfile | while read -r line ; do echo "          $line" | rev | cut -c 1-10 | rev; done


Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *