мне нужно обработать большой файл данных, который содержит многострочные записи, пример ввод:использование AWK для идентификации записи несколько строк и фильтрации
1 Name Dan
1 Title Professor
1 Address aaa street
1 City xxx city
1 State yyy
1 Phone 123-456-7890
2 Name Luke
2 Title Professor
2 Address bbb street
2 City xxx city
3 Name Tom
3 Title Associate Professor
3 Like Golf
4 Name
4 Title Trainer
4 Likes Running
Обратите внимание, что первое целое поле является уникальным и действительно идентифицирую в целом запись. Таким образом, в приведенном выше вводе у меня действительно есть 4 записи, хотя я не знаю, сколько строк атрибутов может иметь каждая запись. Мне нужно: - определить действительную запись (должно иметь поле «Имя» и «Название») - выводить доступные атрибуты для каждой действительной записи, например «Имя», «Заголовок», «Адрес» - это необходимые поля.
Пример вывода:
1 Name Dan
1 Title Professor
1 Address aaa street
2 Name Luke
2 Title Professor
2 Address bbb street
3 Name Tom
3 Title Associate Professor
Таким образом, в выходном файле, запись 4 удаляется, поскольку она doen't есть поле "Name". Запись 3 не имеет поля «Адрес», но все еще печатается на выходе, так как это действительная запись с именами «Имя» и «Заголовок».
Могу ли я сделать это с помощью awk? Но как я могу идентифицировать целую запись, используя первое поле «id» в каждой строке?
Большое спасибо эксперту по сценарию unix shell, который помогает мне! :)
благодарит за вашу помощь! Мне потребовалось немного времени, чтобы переварить ваше решение, а потом я многому научился! :) Очень благодарен! Спасло меня так много времени, как и многому научилось от этого :) – trillions
никаких проблем! рад, что это было полезно. – ghoti
почти +1 - в основном очень приятно. Вы можете отказаться от предложения NR == 1. Вопрос, как представляется, слегка неоднозначен в отношении того, требуется ли «Адрес». Тем не менее, я прочитал его как * не * (требуется запись 3 должна быть выведена). Когда я запускаю ваш скрипт с пропущенной строкой «Адрес», я получаю все четыре записи вместо 1-3, несмотря на то, что «Имя» пусто для записи 4. Причина этого в том, что ваш селектор ' required [$ 2] 'создает элемент массива, соответствующий каждому имени поля, просто ссылаясь на *, и вы не проверяете, что он равен' 1' *. –