Vim или sed/awk/etc - заполнить все строки пробелами до фиксированной ширины - программирование
Подтвердить что ты не робот

Vim или sed/awk/etc - заполнить все строки пробелами до фиксированной ширины

Как я могу поместить каждую строку файла на определенную ширину (скажем, 63 символа в ширину), заполняя пробелы, если нужно?

Теперь предположим, что все строки гарантированно составляют менее 63 символов.

Я использую vim и предпочитаю способ сделать это там (есть ли какая-то команда printf %63s current_line?), где я могу выбрать строки, к которым я хочу применить дополнение.

Тем не менее, я, конечно, открыт для использования sed, awk или какого-то средства linux для выполнения этой задачи.

приветствий.

4b9b3361

Ответ 1

vim

:%s/.*/\=printf('%-63s', submatch(0))

Ответ 2

awk '{printf "%-63s\n", $0}' testfile > newfile

Ответ 3

В Vim я бы использовал команду

:%s/$/\=repeat(' ',64-virtcol('$'))

Если текст для пэдов является ASCII-only и не содержит символов табуляции, это можно использовать col() вместо virtcol().

Ответ 4

С sed, без цикла:

sed -i '/.\{63\}/!{s/$/                                                                /;s/^\(.\{63\}\).*/\1/}' file

Убедитесь, что в первой подстановке достаточно пробелов, чтобы соответствовать количеству пространства, которое вы хотите добавить.

Ответ 5

Просто для удовольствия, версия Perl:

perl -lpe '$_ .= " " x (63 - length $_)'

Ответ 6

Это может сработать для вас:

sed -i ':a;/.\{63\}/!{s/$/ /;ba}' file

или, возможно, более эффективный, но менее элегантный:

sed -i '1{x;:a;/.\{63\}/!{s/^/ /;ba};x};/\(.\{63\}\).*/b;G;s//\1/;y/\n/ /' file

Ответ 7

Другое решение для Perl:

perl -lne 'printf "%-63s\n", $_' file