У меня есть набор продольных данных, сгенерированный компьютерным моделированием, который может быть представлен следующими таблицами (переменные '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) скрипт для обработки этих выходных данных в плоский текстовый файл, чтобы я мог импортировать их в 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, и достаточно гибко, чтобы вместить несколько разные запросы для извлечения разных типов информации из этого иерархического файла.
Опять же, я благодарен всем - большое спасибо.