Как прокомментировал ilkkachu, у вас есть простая опечатка в вашем коде добавления:
echo "Added by: "
read NUM2
addition $NUM1 $NUM
должно быть:
echo "Added by: "
read NUM2
addition $NUM1 $NUM2
То же самое в комментариях для ShellCheck и set -u
для такого рода ошибки. set -u
выдал бы вам ошибку при выполнении скрипта.
Обрабатывать неустановленные переменные и параметры, отличные от специальных параметров «@» или «*», как ошибку при расширении параметров. В стандартную ошибку будет записано сообщение об ошибке, и произойдет выход из неинтерактивной оболочки.
Сperl
:
perl -ne 'printf "%s %-20s %s\n", /(\S+\s+)(\S+)\s*(.*)/' your-file
Или чтобы не касаться строк, которые не соответствуют этому шаблону:
perl -pe '$_ = sprintf "%s %-20s %s\n", $1, $2, $3
if /(\S+\s+)(\S+)\s*(.*)/' your-file
С помощью sed
вы бы добавили много пробелов после второго поля, а затем удалили все после 20-го символа:
sed -E 's/([^ ]* ){2}/& /;s/(.{20}) */\1/'
С помощью bash вы бы написали
while read a b rest; do
printf "%s %-20s %s\n" "$a" "$b" "$rest"
done < info.txt