#1 Le 18/11/2016, à 12: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, à 13: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, à 15: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, à 06: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, à 08: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, à 09: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, à 12: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