Выровнять файл по правому краю

Мне нужна функция для правильного выравнивания моего файла. Не могли бы вы дать мне подсказку или предложение? Благодарю.

4 ответа

while read line
do
  printf '%80s\n' "$line"
done < infile.txt > outfile.txt

Я могу думать только об одном способе ответить на этот вопрос:

 % ./4168932.awk ./4168932.awk        
                      #!/usr/bin/awk -f

                                      {
                           a[++n] = $0;
            if (length(a[n]) > width) {
                   width = length(a[n])
                                      }
                                      }

                                  END {
              format = "%" width "s\n";
    for (line = 1; line <= n; ++line) {
                 printf format, a[line]
                                      }
                                      }

Редактировать:

На самом деле, вам не нужно переворачивать строки:

printf -v spaces "%80s" " "; man rev | sed "s/^/$spaces/;s/.*\(.\{80\}\)\$/\1/"

Оригинал:

Поменяйте местами линии, добавьте их, обрежьте их и переверните обратно.

man rev | rev | sed '1{x;s/^$/          /;s/^.*$/&&&&&&&&/;x};G;s/^\(.\{81\}\).*$/\1/;s/\n//' | rev

Выход:

  REV(1)                    BSD General Commands Manual                   REV(1)

                                                                            NAME
                                          rev — reverse lines of a file or files

                                                                        SYNOPSIS
                                                                  rev [file ...]

                                                                     DESCRIPTION
              The rev utility copies the specified files to the standard output,
        reversing the order of characters in every line.  If no files are speci‐
                                               fied, the standard input is read.

                                                                    AVAILABILITY
           The rev command is part of the util-linux-ng package and is available
                       from ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/.

  BSD                             March 21, 1992                             BSD

Вот еще один способ сделать то же самое:

printf -v spaces "%80s" " "; man rev | rev | sed "s/\$/$spaces/;s/^\(.\{80\}\).*$/\1/" | rev

Вам нужно будет определить максимальную длину строки в вашем файле и написать функцию для заполнения строк пробелами этой длины.

Другие вопросы по тегам