Попробуйте это,
awk NF=NF RS="" FS="\n" OFS=":" ORS="\n" File.txt
Record:One
Record:Two
Используя GNU awk
, мы можем выводить каждую строку ввода с отступом, равным количеству пробелов, соответствующем количеству строк в файле, минус 1.
grep... | awk '{ printf "%2$*1$s\n", NR+length-1, $0 }'
Строка формата printf
, используемая здесь, указывает на вывод второго строкового параметра (, которым является $0
, текущей строки )с шириной поля, заданной первым параметром (NR+length-1
, порядковым номером текущая строка во входных данных плюс длина строки минус 1 ). Результатом этого является то, что строки выводятся в шахматном порядке, что было именно тем эффектом, которого вы хотели.
Большинство не -GNU-реализаций awk
не поддерживают более расширенное использование форматов printf
, поэтому вам нужно решить эту проблему по-другому.
grep... | awk '{ print indent $0 } { indent = indent " " }'
Приведенное выше может быть легче понять, чем первую команду awk
. Мы используем переменную, которую называем indent
. Эта переменная содержит только пробелы, и мы добавляем к ней новый символ пробела для каждой строки ввода после вывода текущей строки с префиксом текущего значения indent
.
В обоих приведенных выше конвейерах grep...
символизирует команду grep
, которую вы мимоходом упоминаете в своем вопросе.