У меня есть набор продольных данных, сгенерированный компьютерным моделированием, который может быть представлен следующими таблицами («var» — это переменные):
time subject var1 var2 var3
t1 subjectA ...
t2 subjectB ...
а также
subject name
subjectA nameA
subjectB nameB
Однако сгенерированный файл записывает файл данных в формате, подобном следующему:
time t1
description
subjectA nameA
var1 var2 var3
subjectB nameB
var1 var2 var3
time t2
description
subjectA nameA
var1 var2 var3
subjectB nameB
var1 var2 var3
...(and so on)
Я использовал (python) script для обработки этих выходных данных в плоский текстовый файл, чтобы я мог импортировать его в R, python, SQL или awk/grep для извлечения информации - пример типа информации, необходимой из один запрос (в нотации SQL, после преобразования данных в таблицу) показан ниже:
SELECT var1, var2, var3 FROM datatable WHERE subject='subjectB'
Интересно, есть ли более эффективное решение, поскольку каждый из этих файлов данных может иметь размер около 100 МБ каждый (а у меня их сотни), а создание плоского текстового файла занимает много времени и занимает дополнительное место на жестком диске с избыточной информацией. В идеале я бы взаимодействовал с исходным набором данных напрямую, чтобы извлечь нужную мне информацию, не создавая дополнительный плоский текстовый файл... Есть ли более простое решение awk/perl для таких задач? Я довольно хорошо разбираюсь в обработке текста на python, но мои навыки в awk находятся в зачаточном состоянии, и у меня нет практических знаний о perl; Интересно, могут ли эти или другие инструменты для предметной области предоставить лучшее решение.
Спасибо!
Постскриптум: Ого, спасибо всем! Мне жаль, что я не могу выбрать ответы всех @FM: спасибо. Мой скрипт Python похож на ваш код без этапа фильтрации. Но ваша организация чиста. @PP: Я думал, что уже разбираюсь в grep, но, видимо, нет! Это очень полезно... но я думаю, что grepping становится трудным при смешивании "времени" с выводом (которое я не включил в свой пример в качестве возможного сценария извлечения! Это моя ошибка). @ghostdog74: Это просто фантастика... но изменить строку, чтобы получить 'subjectA', было непросто... (хотя тем временем я буду больше читать об awk и, надеюсь, попозже покопаюсь). @weismat: Хорошо сказано. @S.Lott: Это чрезвычайно элегантно и гибко - я не просил решения на python (ic), но оно полностью соответствует структуре синтаксического анализа, фильтрации и вывода, предложенной PP, и достаточно гибко, чтобы приспособить ряд различные запросы для извлечения различных типов информации из этого иерархического файла.
Еще раз всем благодарна - большое спасибо.