Я произвел аналогичный вывод с best_file.txt
, содержащим
md5:XXXX
timestamp:XXXX
endpoint:XXXX
filename:XXXX
Неясно, действительно ли эти имена ключей находятся в вашем источнике.Для файлов такого рода я не рекомендую.
В документации по print NF
отмечено, что поля разделены пробелом .Измените первую строку этого значения на md5 XXXX
и соответствующий вывод:
2 - md5
, где print NF
дает количество полей, $ 1 - первое поле и $ 2 - второе (выводит XXXX в этомдело).Таким образом, ваш файл имеет только одно разделенное пробелами поле на строку, что является проблемой, когда awk запускает эти команды один раз для каждой строки (записи).
Если это было 'md5: XXXX отметка времени: XXXX конечная точка: XXXX имя файла:XXXX ', тогда я мог бы запустить awk '{print NF ": " $1 " " $3}' best_file.txt
, чтобы получить
4: md5:XXXX endpoint:XXXX
Конечно, это может быть не под вашим контролем.Вы можете:
1.Объединить группы строк в одну
Вы можете получить произвольное количество полей в одной строке с помощью awk '!(NR%4){print p " " $0, p=""}(NR%4){p=p " " $0}' best_file.txt
(требуется некоторая корректировка, чтобы избавиться от начального пространства; Соединение двух последовательных строк с использованиемawk или sed объясняет команды).Тогда у вас может быть более полезный входной файл.
2.Поиск нужных строк
Добавляя более точные условия ко второму блоку этого фрагмента, вы можете выбрать, какие строки (поля) запоминать для печати.
Оба подхода завершаются неудачно, еслив исходном файле где-то отсутствует строка.На самом деле для разбора ключей потребуется гораздо больше логики.