Как добавить строку в определённой позиции в каждой строке

Вопрос или проблема

С помощью

awk '{ printf "%-15s %s\n", $1, $2 }' renamed | sort -V

… я получаю хороший вывод из файла renamed.

Он выглядит так:

file1           file1.new

Но я хочу изменить вывод на это:

file1           -->  file1.new

Я хочу добавить --> на позицию 15 в каждой строке.

Как это сделать?

Строка формата printf %-15s %s\n указывает, что вы хотите вывести две строки, разделенные пробелом и заканчивающиеся символом новой строки.

Первая строка должна иметь ширину 15 символов, и знак минус указывает, что она должна быть выровнена по левому краю в этих 15 символах (оставшиеся символы справа от строки будут заполнены пробелами).

Чтобы вставить --> перед второй строкой, после единственного пробела, просто измените формат на %-15s --> %s\n.

Пример этого:

$ printf '%s\n' "one thing" "another thing" | awk '{ printf "%-15s %s\n", $1, $2 }'
one             thing
another         thing
$ printf '%s\n' "one thing" "another thing" | awk '{ printf "%-15s -->  %s\n", $1, $2 }'
one             -->  thing
another         -->  thing

Обратите внимание, что --> на самом деле добавляется на позицию 17, а не 15. Позиция 15 зарезервирована для первой строки, в то время как позиция 16 будет содержать пробел в строке формата. Чтобы добавить --> на позицию 15, вам нужно уменьшить пробел для первой строки до 13: %-13s --> %s\n.

Ответ или решение

Чтобы добавить строку в определённое место в каждой строке вывода команды awk, необходимо изменить форматирование в команде. В вашем случае требуется вставить строку --> на позицию 15.

В исходном коде, который вы привели, используется следующая команда:

awk '{ printf "%-15s %s\n", $1, $2 }' renamed | sort -V

Этот код формирует вывод, где первая строка занимает 15 символов, оставляя пробел для второй строки. Чтобы вставить --> на позицию 15, нужно отрегулировать ширину первой строки, таким образом, чтобы учесть длину вставляемого текста.

Изменение Форматирования

Для достижения желаемого результата, можно изменить формат строки следующим образом:

awk '{ printf "%-13s --> %s\n", $1, $2 }' renamed | sort -V

Разбор изменений:

  1. %-13s – это обозначает, что первая строка будет занимать 13 символов. Недостающие символы будут заполнены пробелами. Это предоставляет место для добавления текста -->, который занимает 5 символов.
  2. –> – это непосредственно добавляемая строка, которая теперь будет располагаться сразу после первых 13 символов и одного пробела, то есть на позиции 15.

Пример

Предположим, у вас есть файл renamed, содержащий следующие строки:

file1 file1.new
file2 file2.new

После выполнения команды:

awk '{ printf "%-13s --> %s\n", $1, $2 }' renamed | sort -V

Вы получите следующий вывод:

file1        --> file1.new
file2        --> file2.new

Таким образом, данные изменяются по вашему запросу, и строка вставляется в нужной позиции с учётом всех пробелов.

Заключение

Подводя итог, используя awk, можно легко изменить формат вывода и вставить текст в нужное место, регулировав ширину полей. Это довольно мощный инструмент для обработки текстовых файлов в Unix-подобных системах, который может сэкономить время и усилия при выполнении задач актуализации данных. Чтобы оставаться в контексте эффективного использования командной строки, рекомендуется ознакомиться с другими опциями awk и экспериментировать с различными форматами вывода для более сложных задач.

Оцените материал
Добавить комментарий

Капча загружается...