J'ai un ensemble de données longitudinales généré par une simulation par ordinateur qui peut être représenté par les tables suivantes ('var' sont des variables):Traitement du texte à partir d'un fichier non plat (pour extraire des informations comme s'il s'agissait d'un fichier plat)
time subject var1 var2 var3
t1 subjectA ...
t2 subjectB ...
et
subject name
subjectA nameA
subjectB nameB
Cependant, le fichier généré enregistre un fichier de données dans un format similaire à ce qui suit:
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)
J'ai utilisé un script (python) pour traiter ces données de sortie dans un fichier texte plat afin que je puisse l'importer dans R, python, SQL, ou awk/grep pour extraire des informations - un exemple du type d'information désiré à partir d'une seule requête (en notation SQL, après que les données sont converties à une table) est indiqué ci-dessous:
SELECT var1, var2, var3 FROM datatable WHERE subject='subjectB'
Je me demande s'il y a une solution plus efficace que chacun de ces fichiers de données peuvent être ~ 100 Mo chacun (et j'ai des centaines d'entre eux) et la création du fichier texte plat prend du temps et prend de l'espace disque supplémentaire avec des informations redondantes. Idéalement, j'interagirais directement avec l'ensemble de données original pour extraire l'information que je désire, sans créer le fichier texte extra plat ... Existe-t-il une solution awk/perl pour de telles tâches plus simple? Je suis très compétent en traitement de texte en python mais mes compétences en awk sont rudimentaires et je n'ai aucune connaissance pratique de perl; Je me demande si ces outils ou d'autres domaines spécifiques peuvent fournir une meilleure solution.
Merci!
Post-scriptum: Wow, merci à tous! Je suis désolé de ne pas pouvoir choisir les réponses de tout le monde @FM: merci. Mon script Python ressemble à votre code sans l'étape de filtrage. Mais votre organisation est propre. @PP: Je pensais que j'étais déjà compétent en grep mais apparemment pas! C'est très utile ... mais je pense que le grepping devient difficile quand on mélange le 'temps' dans la sortie (ce que j'ai omis d'inclure comme scénario d'extraction possible dans mon exemple! @ ghostdog74: C'est juste fantastique ... mais modifier la ligne pour obtenir 'subjectA' n'était pas simple ... (bien que je vais en lire plus sur awk en attendant et j'espère que je vais grok plus tard). @weismat: Bien indiqué. @ S.Lott: Ceci est extrêmement élégant et flexible - je ne demandais pas une solution python (ic) mais cela s'intègre parfaitement avec l'analyse, filtre, et cadre de sortie suggéré par PP, et est assez flexible pour accueillir un certain nombre de différentes requêtes pour extraire différents types d'informations de ce fichier hiérarchique.
Encore une fois, je suis reconnaissant à tous - merci beaucoup.
J'aime, très élégant. – mythz