Выровнять файл по правому краю
Мне нужна функция для правильного выравнивания моего файла. Не могли бы вы дать мне подсказку или предложение? Благодарю.
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
Вам нужно будет определить максимальную длину строки в вашем файле и написать функцию для заполнения строк пробелами этой длины.