Выравнивание третьего слова по 20 пробелам от начала второго слова [дубликат]

Как прокомментировал ilkkachu, у вас есть простая опечатка в вашем коде добавления:

     echo "Added by: "                               
     read NUM2                                       
     addition $NUM1 $NUM                             

должно быть:

     echo "Added by: "                               
     read NUM2                                       
     addition $NUM1 $NUM2                

То же самое в комментариях для ShellCheck и set -u для такого рода ошибки. set -u выдал бы вам ошибку при выполнении скрипта.

Обрабатывать неустановленные переменные и параметры, отличные от специальных параметров «@» или «*», как ошибку при расширении параметров. В стандартную ошибку будет записано сообщение об ошибке, и произойдет выход из неинтерактивной оболочки.

0
07.05.2018, 23:18
3 ответа

С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
2
28.01.2020, 02:18

С помощью sedвы бы добавили много пробелов после второго поля, а затем удалили все после 20-го символа:

sed -E 's/([^ ]* ){2}/&                   /;s/(.{20}) */\1/'
2
28.01.2020, 02:18

С помощью bash вы бы написали

while read a b rest; do
    printf "%s %-20s %s\n" "$a" "$b" "$rest"
done < info.txt
0
28.01.2020, 02:18

Теги

Похожие вопросы