Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/11/2016, à 13:26

gbeaudet

Script en bash : extraire des infos et les stocker.

Bonjour à tous,

Je débute en bash, et j’aurai besoin d’aide concernant une manip qui je pense est extrêmement simple pour un habitué ☺
Voilà, je dispose d’un grand nombre de fichiers nommés bidule001.txt, bidule002.txt… qui contiennent chacun du blabla et sur la dernière ligne de blabla une valeur numérique :
Exemple :
Blablabla
Blablabla
blablabla is 0.000123456

Ce que je souhaite : faire un script qui va récupérer chaque nom de fichier (donc bidule0001, etc…) et les mettre dans un fichier bilan.txt sous la forme d’une colonne. Puis récupérer pour chaque fichier biduleXXX.txt la valeur numérique associée, pour la mettre dans une deuxième colonne de bilan.txt.
Cela fait des heures que j’essaie de faire ce script, et comme mes connaissances en la matière sont insignifiantes je galère.
Merci d’avance à celles et ceux qui pourront m’aider !

Hors ligne

#2 Le 18/11/2016, à 14:42

pingouinux

Re : Script en bash : extraire des infos et les stocker.

Bonjour,
Tu peux faire ceci, par exemple

$ for i in bidule???.txt; do awk '{val=$NF}END{printf("%s %s\n",FILENAME,val)}' "$i"; done >bilan.txt

Hors ligne

#3 Le 18/11/2016, à 16:27

gbeaudet

Re : Script en bash : extraire des infos et les stocker.

Bonjour, merci beaucoup pour le coup de main, je vais tester de cette manière dès maintenant, je posterai mes avancées quand ce sera significatif !
Merci !

Hors ligne

#4 Le 19/11/2016, à 07:54

pingouinux

Re : Script en bash : extraire des infos et les stocker.

J'ai simplifié un peu

for i in bidule???.txt; do awk 'END{printf("%s %s\n",FILENAME,$NF)}' "$i"; done >bilan.txt

Hors ligne

#5 Le 19/11/2016, à 09:34

credenhill

Re : Script en bash : extraire des infos et les stocker.

hello

awk '{t[FILENAME]=$NF} END {for(n in t)print n, t[n]}'  bidul* > bilan.txt

Hors ligne

#6 Le 21/11/2016, à 10:45

gbeaudet

Re : Script en bash : extraire des infos et les stocker.

Bonjour à tous, merci pour votre aide, n'ayant pas été dispo ces derniers jours je n'ai pas encore pu tester vos solutions, mais je m'y mets aujourd'hui !

Hors ligne

#7 Le 22/11/2016, à 13:45

gbeaudet

Re : Script en bash : extraire des infos et les stocker.

Bonjour à tous,
Désolé pour le retard, voici ce que j'ai pu faire pour avoir mes résultats.
ça se fait en 4 étapes dans le terminal, et d'avance je m'excuse pour l'allure de ces lignes de code, car ça risque d'écorcher les yeux d'habitués du bash...

First step: Check of existing directory results, then if yes, extraction of the filenames to put them into name_tab.csv:
for i in /pathwaytothedata/*/results/; do if [ -d "${i}" ]; then awk 'END{printf("%s %s\n",FILENAME,$NF)}' "$i"; fi; done >> /home/name_tab.csv;

Second step: Reduction of the filenames to the name of each subject to put them into namebis_tab.csv:
while read line; do echo -e "$line" | cut -d '_' -f 3 | cut -c14-18 >> /home/namebis_tab.csv; done < /home/name_tab.csv;

Third step: Extraction of the values to put them into value_tab.csv:
for i in /pathwaytothedata/*/results/; do grep "0.000" $i/*_value.txt | cut -c9-19; done >> /home/value_tab.csv;

Fourth step: Add the names of the subjects in the 1st column & the corresponding value in the RESULTS_tab.csv:
paste -d , /home/namebis_tab.csv /home/value_tab.csv >> /home/RESULTS_tab.csv

Voilà, j'espère que ce n'est pas trop fouillis, en tout cas ça a marché, et vos conseils m'ont été très utiles !
Merci encore !

Hors ligne