Вопрос или проблема
С помощью
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
Разбор изменений:
- %-13s – это обозначает, что первая строка будет занимать 13 символов. Недостающие символы будут заполнены пробелами. Это предоставляет место для добавления текста
-->
, который занимает 5 символов. - –> – это непосредственно добавляемая строка, которая теперь будет располагаться сразу после первых 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
и экспериментировать с различными форматами вывода для более сложных задач.