#1 Le 10/09/2019, à 09:03
- tenkaichi1995
fusionner plusieurs colones de fichiers en un seul
Bonjour,
Je dois traiter un certain nombre de données répartis dans plusieurs fichiers. J'aimerais donc récupérer toutes ces données pour les mettre dans un seul fichier, mais je n'y arrive pas. Les fichiers de bases comportent une en-tête ainsi que plusieurs colonnes et je souhaiterais extraire simplement les deux premières colonnes de chaque fichier pour les ajouter à mon fichier final. Cependant je voudrais que les données soient ajoutées dans une nouvelle colonne et pas les unes à la suite des autres.
J'ai essayé de faire ça avec la commande cat, mais je ne vois pas comment faire pour ne sélectionner que deux colonnes et créer de nouvelles colonnes dans mon fichier de sorti..
D'avance merci pour votre aide !
Hors ligne
#2 Le 10/09/2019, à 09:27
- MicP
Re : fusionner plusieurs colones de fichiers en un seul
Bonjour
…je ne vois pas comment faire pour ne sélectionner que deux colonnes et créer de nouvelles colonnes dans mon fichier de sorti..
Sans possibilité de voir un exemple du contenu des fichiers d'entrée
ni la façon dont le contenu du fichier de sortie pourrait être formaté
je vois encore moins comment comment faire.
Désolé, je fais avec ce que j'ai…
Hors ligne
#3 Le 10/09/2019, à 09:29
- tenkaichi1995
Re : fusionner plusieurs colones de fichiers en un seul
Désolé,
voici un bout d'un des fichiers d'entrée.
# Orientation sensitive EELS calculation - beam energy = 200.keV
# Sample to beam orientation : 1.000 0.000 0.000
# Collection and convergence semiangle: 3.500 0.000 ; # points: 50 x 1
# Detector position: 0.0000 0.0000
# Units are a_0^2 / eV. Multiply by 28.00 10^-18 to get cm^-2 / eV. Or by 28 to get Mbarn / eV.
# Relativistic and cross-terms.
# # POT SCF 100 6.0000 0, screened core-hole, AFOLP (folp(0)= 1.150)
# # Gam_ch=8.676E-02 H-L exch Vi= 7.000E-01 Vr= 0.000E+00
# FMS rfms= 7.1000
# S02=1.000 Global_sig2= 0.00000
# Energy total atomic-bg fine-struct xx xy xz yx yy yz zx zy zz
275.654 0.824522E-07 0.666035E-07 0.158487E-07 0.128015E-07 -0.381376E-31 0.135141E-17 -0.138768E-31 0.338126E-07 -0.114271E-31 0.179887E-17 -0.588208E-31 0.358381E-07
277.222 0.101746E-06 0.808805E-07 0.208659E-07 0.159641E-07 0.587026E-32 0.200759E-17 -0.274218E-31 0.420078E-07 0.360517E-31 0.250717E-17 -0.799234E-31 0.437745E-07
278.641 0.129187E-06 0.100600E-06 0.285866E-07 0.204715E-07 -0.174260E-31 0.319296E-17 0.166201E-31 0.536863E-07 0.210780E-31 0.378618E-17 -0.238965E-30 0.550289E-07
279.910 0.169632E-06 0.128716E-06 0.409163E-07 0.271274E-07 -0.484143E-31 0.550455E-17 -0.812876E-31 0.709267E-07 -0.348423E-33 0.627580E-17 -0.195017E-30 0.715780E-07
281.031 0.231790E-06 0.170319E-06 0.614717E-07 0.373579E-07 -0.725666E-31 0.103698E-16 -0.102834E-30 0.974150E-07 -0.947390E-32 0.115006E-16 -0.395237E-30 0.970176E-07
282.001 0.332028E-06 0.234563E-06 0.974652E-07 0.537836E-07 -0.787314E-31 0.213454E-16 -0.185661E-30 0.139924E-06 -0.802485E-32 0.232456E-16 -0.707494E-30 0.138320E-06
282.823 0.502014E-06 0.338292E-06 0.163722E-06 0.812912E-07 -0.655051E-31 0.473530E-16 -0.315401E-30 0.211078E-06 0.285611E-31 0.509673E-16 -0.449594E-30 0.209645E-06
283.495 0.800049E-06 0.510887E-06 0.289162E-06 0.128447E-06 -0.766732E-30 0.108825E-15 -0.725169E-30 0.332992E-06 0.977380E-32 0.116234E-15 -0.154541E-29 0.338610E-06
l'idée serait de récupérer la colonne "Energy" et la colonne "total" d'un dizaine de fichiers puis de les mettre dans un fichier de sortie sous cette forme:
Energy total Energy total Energy total
275.654 0.824522E-07 275.654 0.824522E-07 275.654 0.824522E-07
277.222 0.101746E-06 277.222 0.101746E-06 277.222 0.101746E-06
278.641 0.129187E-06 278.641 0.129187E-06 278.641 0.129187E-06
Les colonnes ayant bien plus de valeurs que ce que j'ai mis dans l'exemple. Désole pour le manque de clarté; j'espère que c'est mieux maintenant !
Dernière modification par tenkaichi1995 (Le 10/09/2019, à 09:33)
Hors ligne
#4 Le 10/09/2019, à 09:40
- diesel
Re : fusionner plusieurs colones de fichiers en un seul
Si tu n'as pas ça à faire régulièrement, tu peux le faire assez facilement en ouvrant tes fichiers avec libreoffice calc et en faisant le ménage à la main dans les colonnes.
Après, quelques copier-coller...
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#5 Le 10/09/2019, à 09:45
- tenkaichi1995
Re : fusionner plusieurs colones de fichiers en un seul
Justement, j'ai des centaines de fichiers à traiter comme ça... Si je pouvais au moins m'éviter des centaines de copier/coller à la main ça me ferait gagner du temps ^^
Hors ligne
#6 Le 10/09/2019, à 10:34
- FrancisFDZ
Re : fusionner plusieurs colones de fichiers en un seul
Bonjour,
Quel est le format original des fichiers ? (odt =>libre office ou csv => texte)
-- On peut avoir des raisons de se plaindre et n'avoir pas raison de se plaindre --
[Victor Hugo]
Hors ligne
#7 Le 10/09/2019, à 10:36
- tenkaichi1995
Re : fusionner plusieurs colones de fichiers en un seul
ce sont des fichiers txt
Hors ligne
#8 Le 10/09/2019, à 11:03
- pingouinux
Re : fusionner plusieurs colones de fichiers en un seul
Bonjour,
Voici une ébauche.
Pour récupérer les colonnes qui t'intéressent dans chaque fichier :
awk 'BEGIN{printf("%7s %-10s\n","Energy","total")}$1!="#"{printf("%8s %-12s\n",$1,$2)}' fichier_1 >cols_1
awk 'BEGIN{printf("%7s %-10s\n","Energy","total")}$1!="#"{printf("%8s %-12s\n",$1,$2)}' fichier_2 >cols_2
awk 'BEGIN{printf("%7s %-10s\n","Energy","total")}$1!="#"{printf("%8s %-12s\n",$1,$2)}' fichier_3 >cols_3
Pour regrouper les colonnes :
paste cols_1 cols_2 cols_3
Édité : Simplification
Dernière modification par pingouinux (Le 10/09/2019, à 17:03)
Hors ligne
#9 Le 10/09/2019, à 12:31
- kamaris
Re : fusionner plusieurs colones de fichiers en un seul
EDIT : Attention : ce qui suit ne marche pas pour un nombre de fichiers d'entrée supérieur ou égal à cinq. Se reporter en #11 pour le cas général.
---
Voici une solution possible avec sed, que j'ai testée rapidement avec ton exemple de fichier d'entrée dupliqué. Donc à tester mieux si ça t'intéresse, mais il y a l'idée.
Je suppose dans le script ci-dessous que tous tes fichiers d'entrée sont regroupés dans un répertoire nommé « dir », et que tu exécutes ce script juste au-dessus de ce répertoire (de sorte que « for f in dir/* » liste bien tous tes fichiers d'entrée, et seulement eux).
#!/bin/bash
sed_script_1='1 i\'; sed_script_21='s/^[^#]'; sed_script_22='/'; files=(); i=0
for f in dir/*; do
files[$i]="$f"
sed_script_1+='Energy\ttotal\t\t'
sed_script_21+='\s*([^ ]+)\s+([^ ]+)[^|]+\|'
sed_script_22+="\\$((2*i+1))\\t\\$((2*i+2))\\t"
((i++))
done
sed_script_1=${sed_script_1:0:-4}
sed_script_21="${sed_script_21:0:-7}.*"
sed_script_22="${sed_script_22:0:-2}/; T; p"
sed -nE -e "$sed_script_1" -e "$sed_script_21$sed_script_22" <(paste -d '|' "${files[@]}")
Dernière modification par kamaris (Le 10/09/2019, à 18:30)
Hors ligne
#10 Le 10/09/2019, à 14:47
- Watael
Re : fusionner plusieurs colones de fichiers en un seul
files=( dir/* )
for i in "${!files[@]}"; do...
pas évidente cette "solution avec sed", étant donné que c'est le shell qui construit, de manière occult(é)e, le script sed...
KISS!
s'il y a des champs à traiter, on utilise awk.
Dernière modification par Watael (Le 10/09/2019, à 14:47)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 10/09/2019, à 17:47
- kamaris
Re : fusionner plusieurs colones de fichiers en un seul
C'est vrai qu'ici, la boucle peut être évitée, puisque c'est essentiellement une répétition du même motif. Voici une réécriture sans boucle et sans insertion de première ligne :
#!/bin/bash
files=('dir/'*)
sed_script=':intro; /^#/{s/#//g; h; n; b intro};'
sed_script+=':main; x; s%(.+\|)\s*([^ ]+)\s+([^ ]+).*%\1\2\t\3%;'
sed_script+='s%\s*([^ ]+)\s+([^ ]+)[^|]+\|%\1\t\2\t%g; p;'
sed_script+='$ {x; /^$/!{x; s/.*//; b main}}'
sed -nE "$sed_script" <(paste -d '|' "${files[@]}") | column -t
---
EDIT : le gros problème de ce que j'ai mis en #9, c'est surtout que sed n'admet que neuf sous-motifs de \1 à \9. Donc ma boucle n'a vite aucun sens quand le nombre de fichiers augmente. Tout cela dit sans contredire aucunement la remarque-KISS! de Watael sur awk : ça viendrait plutôt en renfort
Dernière modification par kamaris (Le 10/09/2019, à 20:53)
Hors ligne
#12 Le 10/09/2019, à 20:05
- Watael
Re : fusionner plusieurs colones de fichiers en un seul
perso, tout en awk, je concaténerais les valeurs voulues dans un tableau ayant pour indice le numéro de ligne ou une incrémentation débutant sur la première ligne qui correspond, et dont j'afficherais les éléments à la fin (END{for (i in tablo) print...}).
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 11/09/2019, à 08:24
- nany
Re : fusionner plusieurs colones de fichiers en un seul
Bonjour,
+1 pour awk.
awk '/Energy/{n=FNR-1;i=FNR-n;table[i]=table[i]" Energy total "}$1!="#"{i=FNR-n;table[i]=table[i]" "$1" "$2" "}END{for(i in table){print table[i]}}' fichier1 fichier2 fichier3 […]
Hors ligne
#14 Le 11/09/2019, à 12:44
- kamaris
Re : fusionner plusieurs colones de fichiers en un seul
Pour enfoncer le clou (dans mon propre pied), j'ai fait quelques tests comparatifs de performance entre la solution proposée par nany en #13, et celle que je propose #11, remaniée en une seule ligne :
$ function sed_kamaris() { sed -nE ':intro; /^#/{s/#//g; h; n; b intro}; :main; x; s%(.+\|)\s*([^ ]+)\s+([^ ]+).*%\1\2\t\3%; s%\s*([^ ]+)\s+([^ ]+)[^|]+\|%\1\t\2\t%g; p; $ {x; /^$/!{x; s/.*//; b main}}' <(paste -d '|' dir/*) | column -t; }
$
$ function awk_nany() { awk '/Energy/{n=FNR-1;i=FNR-n;table[i]=table[i]" Energy total "}$1!="#"{i=FNR-n;table[i]=table[i]" "$1" "$2" "}END{for(i in table){print table[i]}}' dir/*; }
$
Pour 10 fichiers :
$ time awk_nany > /dev/null
real 0m0,025s
user 0m0,016s
sys 0m0,009s
$
$ time sed_kamaris > /dev/null
real 0m0,065s
user 0m0,050s
sys 0m0,014s
$
Pour 100 fichiers :
$ time awk_nany > /dev/null
real 0m0,038s
user 0m0,030s
sys 0m0,004s
$
$ time sed_kamaris > /dev/null
real 0m0,343s
user 0m0,320s
sys 0m0,017s
$
Pour 1000 fichiers :
$ time awk_nany > /dev/null
real 0m0,231s
user 0m0,183s
sys 0m0,041s
$
$ time sed_kamaris > /dev/null
real 0m3,033s
user 0m2,863s
sys 0m0,085s
$
Voilà, voilà…
Hors ligne
#15 Le 18/09/2019, à 18:08
- LeoMajor
Re : fusionner plusieurs colones de fichiers en un seul
bonjour,
encore des fichiers temporaires pour des calculs intermédiaires ...
tu mets tout dans un tableau et ensuite tu crées des fonctions selon les besoins
gawk -f ~/scripts/atome1.awk /tmp/test*
--affichage
/tmp/test01.txt.1.atomic-bg = 0.666035E-07
/tmp/test01.txt.1.energie = 275.654
/tmp/test01.txt.1.fine-struct = 0.158487E-07
/tmp/test01.txt.1.index = 1
/tmp/test01.txt.1.ref = /tmp/test01.txt,1
/tmp/test01.txt.1.total = 0.824522E-07
/tmp/test01.txt.1.zz = 0.358381E-07
/tmp/test01.txt.2.atomic-bg = 0.808805E-07
/tmp/test01.txt.2.energie = 277.222
/tmp/test01.txt.2.fine-struct = 0.208659E-07
/tmp/test01.txt.2.index = 2
/tmp/test01.txt.2.ref = /tmp/test01.txt,2
/tmp/test01.txt.2.total = 0.101746E-06
/tmp/test01.txt.2.zz = 0.437745E-07
/tmp/test01.txt.3.atomic-bg = 0.100600E-06
/tmp/test01.txt.3.energie = 278.641
/tmp/test01.txt.3.fine-struct = 0.285866E-07
/tmp/test01.txt.3.index = 3
/tmp/test01.txt.3.ref = /tmp/test01.txt,3
/tmp/test01.txt.3.total = 0.129187E-06
/tmp/test01.txt.3.zz = 0.550289E-07
/tmp/test01.txt.4.atomic-bg = 0.128716E-06
/tmp/test01.txt.4.energie = 279.910
/tmp/test01.txt.4.fine-struct = 0.409163E-07
/tmp/test01.txt.4.index = 4
/tmp/test01.txt.4.ref = /tmp/test01.txt,4
/tmp/test01.txt.4.total = 0.169632E-06
/tmp/test01.txt.4.zz = 0.715780E-07
/tmp/test01.txt.5.atomic-bg = 0.170319E-06
/tmp/test01.txt.5.energie = 281.031
/tmp/test01.txt.5.fine-struct = 0.614717E-07
/tmp/test01.txt.5.index = 5
/tmp/test01.txt.5.ref = /tmp/test01.txt,5
/tmp/test01.txt.5.total = 0.231790E-06
/tmp/test01.txt.5.zz = 0.970176E-07
/tmp/test01.txt.6.atomic-bg = 0.234563E-06
/tmp/test01.txt.6.energie = 282.001
/tmp/test01.txt.6.fine-struct = 0.974652E-07
/tmp/test01.txt.6.index = 6
/tmp/test01.txt.6.ref = /tmp/test01.txt,6
/tmp/test01.txt.6.total = 0.332028E-06
/tmp/test01.txt.6.zz = 0.138320E-06
/tmp/test01.txt.7.atomic-bg = 0.338292E-06
/tmp/test01.txt.7.energie = 282.823
/tmp/test01.txt.7.fine-struct = 0.163722E-06
/tmp/test01.txt.7.index = 7
/tmp/test01.txt.7.ref = /tmp/test01.txt,7
/tmp/test01.txt.7.total = 0.502014E-06
/tmp/test01.txt.7.zz = 0.209645E-06
/tmp/test01.txt.8.atomic-bg = 0.510887E-06
/tmp/test01.txt.8.energie = 283.495
/tmp/test01.txt.8.fine-struct = 0.289162E-06
/tmp/test01.txt.8.index = 8
/tmp/test01.txt.8.ref = /tmp/test01.txt,8
/tmp/test01.txt.8.total = 0.800049E-06
/tmp/test01.txt.8.zz = 0.338610E-06
/tmp/test01.txt.indexes.count. = 8
/tmp/test02.txt.1.atomic-bg = 0.666035E-07
/tmp/test02.txt.1.energie = 275.654
/tmp/test02.txt.1.fine-struct = 0.158487E-07
/tmp/test02.txt.1.index = 1
/tmp/test02.txt.1.ref = /tmp/test02.txt,1
/tmp/test02.txt.1.total = 1.824522E-07
/tmp/test02.txt.1.zz = 0.358381E-07
/tmp/test02.txt.2.atomic-bg = 0.808805E-07
/tmp/test02.txt.2.energie = 277.222
/tmp/test02.txt.2.fine-struct = 0.208659E-07
/tmp/test02.txt.2.index = 2
/tmp/test02.txt.2.ref = /tmp/test02.txt,2
/tmp/test02.txt.2.total = 1.101746E-06
/tmp/test02.txt.2.zz = 0.437745E-07
/tmp/test02.txt.3.atomic-bg = 0.100600E-06
/tmp/test02.txt.3.energie = 278.641
/tmp/test02.txt.3.fine-struct = 0.285866E-07
/tmp/test02.txt.3.index = 3
/tmp/test02.txt.3.ref = /tmp/test02.txt,3
/tmp/test02.txt.3.total = 1.129187E-06
/tmp/test02.txt.3.zz = 0.550289E-07
/tmp/test02.txt.4.atomic-bg = 0.128716E-06
/tmp/test02.txt.4.energie = 279.910
/tmp/test02.txt.4.fine-struct = 0.409163E-07
/tmp/test02.txt.4.index = 4
/tmp/test02.txt.4.ref = /tmp/test02.txt,4
/tmp/test02.txt.4.total = 1.169632E-06
/tmp/test02.txt.4.zz = 0.715780E-07
/tmp/test02.txt.5.atomic-bg = 0.170319E-06
/tmp/test02.txt.5.energie = 281.031
/tmp/test02.txt.5.fine-struct = 0.614717E-07
/tmp/test02.txt.5.index = 5
/tmp/test02.txt.5.ref = /tmp/test02.txt,5
/tmp/test02.txt.5.total = 1.231790E-06
/tmp/test02.txt.5.zz = 0.970176E-07
/tmp/test02.txt.6.atomic-bg = 0.234563E-06
/tmp/test02.txt.6.energie = 282.001
/tmp/test02.txt.6.fine-struct = 0.974652E-07
/tmp/test02.txt.6.index = 6
/tmp/test02.txt.6.ref = /tmp/test02.txt,6
/tmp/test02.txt.6.total = 1.332028E-06
/tmp/test02.txt.6.zz = 0.138320E-06
/tmp/test02.txt.7.atomic-bg = 0.338292E-06
/tmp/test02.txt.7.energie = 282.823
/tmp/test02.txt.7.fine-struct = 0.163722E-06
/tmp/test02.txt.7.index = 7
/tmp/test02.txt.7.ref = /tmp/test02.txt,7
/tmp/test02.txt.7.total = 1.502014E-06
/tmp/test02.txt.7.zz = 0.209645E-06
/tmp/test02.txt.8.atomic-bg = 0.510887E-06
/tmp/test02.txt.8.energie = 283.495
/tmp/test02.txt.8.fine-struct = 0.289162E-06
/tmp/test02.txt.8.index = 8
/tmp/test02.txt.8.ref = /tmp/test02.txt,8
/tmp/test02.txt.8.total = 1.800049E-06
/tmp/test02.txt.8.zz = 0.338610E-06
/tmp/test02.txt.indexes.count. = 8
/tmp/test03.txt.1.atomic-bg = 0.666035E-07
/tmp/test03.txt.1.energie = 275.654
/tmp/test03.txt.1.fine-struct = 0.158487E-07
/tmp/test03.txt.1.index = 1
/tmp/test03.txt.1.ref = /tmp/test03.txt,1
/tmp/test03.txt.1.total = 2.824522E-07
/tmp/test03.txt.1.zz = 0.358381E-07
/tmp/test03.txt.2.atomic-bg = 0.808805E-07
/tmp/test03.txt.2.energie = 277.222
/tmp/test03.txt.2.fine-struct = 0.208659E-07
/tmp/test03.txt.2.index = 2
/tmp/test03.txt.2.ref = /tmp/test03.txt,2
/tmp/test03.txt.2.total = 2.101746E-06
/tmp/test03.txt.2.zz = 0.437745E-07
/tmp/test03.txt.3.atomic-bg = 0.100600E-06
/tmp/test03.txt.3.energie = 278.641
/tmp/test03.txt.3.fine-struct = 0.285866E-07
/tmp/test03.txt.3.index = 3
/tmp/test03.txt.3.ref = /tmp/test03.txt,3
/tmp/test03.txt.3.total = 2.129187E-06
/tmp/test03.txt.3.zz = 0.550289E-07
/tmp/test03.txt.4.atomic-bg = 0.128716E-06
/tmp/test03.txt.4.energie = 279.910
/tmp/test03.txt.4.fine-struct = 0.409163E-07
/tmp/test03.txt.4.index = 4
/tmp/test03.txt.4.ref = /tmp/test03.txt,4
/tmp/test03.txt.4.total = 2.169632E-06
/tmp/test03.txt.4.zz = 0.715780E-07
/tmp/test03.txt.5.atomic-bg = 0.170319E-06
/tmp/test03.txt.5.energie = 281.031
/tmp/test03.txt.5.fine-struct = 0.614717E-07
/tmp/test03.txt.5.index = 5
/tmp/test03.txt.5.ref = /tmp/test03.txt,5
/tmp/test03.txt.5.total = 2.231790E-06
/tmp/test03.txt.5.zz = 0.970176E-07
/tmp/test03.txt.6.atomic-bg = 0.234563E-06
/tmp/test03.txt.6.energie = 282.001
/tmp/test03.txt.6.fine-struct = 0.974652E-07
/tmp/test03.txt.6.index = 6
/tmp/test03.txt.6.ref = /tmp/test03.txt,6
/tmp/test03.txt.6.total = 2.332028E-06
/tmp/test03.txt.6.zz = 0.138320E-06
/tmp/test03.txt.7.atomic-bg = 0.338292E-06
/tmp/test03.txt.7.energie = 282.823
/tmp/test03.txt.7.fine-struct = 0.163722E-06
/tmp/test03.txt.7.index = 7
/tmp/test03.txt.7.ref = /tmp/test03.txt,7
/tmp/test03.txt.7.total = 2.502014E-06
/tmp/test03.txt.7.zz = 0.209645E-06
/tmp/test03.txt.8.atomic-bg = 0.510887E-06
/tmp/test03.txt.8.energie = 283.495
/tmp/test03.txt.8.fine-struct = 0.289162E-06
/tmp/test03.txt.8.index = 8
/tmp/test03.txt.8.ref = /tmp/test03.txt,8
/tmp/test03.txt.8.total = 2.800049E-06
/tmp/test03.txt.8.zz = 0.338610E-06
/tmp/test03.txt.indexes.count. = 8
/tmp/test04.txt.1.atomic-bg = 0.666035E-07
/tmp/test04.txt.1.energie = 375.654
/tmp/test04.txt.1.fine-struct = 0.158487E-07
/tmp/test04.txt.1.index = 1
/tmp/test04.txt.1.ref = /tmp/test04.txt,1
/tmp/test04.txt.1.total = 3.824522E-07
/tmp/test04.txt.1.zz = 0.358381E-07
/tmp/test04.txt.2.atomic-bg = 0.808805E-07
/tmp/test04.txt.2.energie = 377.222
/tmp/test04.txt.2.fine-struct = 0.208659E-07
/tmp/test04.txt.2.index = 2
/tmp/test04.txt.2.ref = /tmp/test04.txt,2
/tmp/test04.txt.2.total = 3.101746E-06
/tmp/test04.txt.2.zz = 0.437745E-07
/tmp/test04.txt.3.atomic-bg = 0.100600E-06
/tmp/test04.txt.3.energie = 378.641
/tmp/test04.txt.3.fine-struct = 0.285866E-07
/tmp/test04.txt.3.index = 3
/tmp/test04.txt.3.ref = /tmp/test04.txt,3
/tmp/test04.txt.3.total = 3.129187E-06
/tmp/test04.txt.3.zz = 0.550289E-07
/tmp/test04.txt.4.atomic-bg = 0.128716E-06
/tmp/test04.txt.4.energie = 379.910
/tmp/test04.txt.4.fine-struct = 0.409163E-07
/tmp/test04.txt.4.index = 4
/tmp/test04.txt.4.ref = /tmp/test04.txt,4
/tmp/test04.txt.4.total = 3.169632E-06
/tmp/test04.txt.4.zz = 0.715780E-07
/tmp/test04.txt.5.atomic-bg = 0.170319E-06
/tmp/test04.txt.5.energie = 381.031
/tmp/test04.txt.5.fine-struct = 0.614717E-07
/tmp/test04.txt.5.index = 5
/tmp/test04.txt.5.ref = /tmp/test04.txt,5
/tmp/test04.txt.5.total = 3.231790E-06
/tmp/test04.txt.5.zz = 0.970176E-07
/tmp/test04.txt.6.atomic-bg = 0.234563E-06
/tmp/test04.txt.6.energie = 382.001
/tmp/test04.txt.6.fine-struct = 0.974652E-07
/tmp/test04.txt.6.index = 6
/tmp/test04.txt.6.ref = /tmp/test04.txt,6
/tmp/test04.txt.6.total = 3.332028E-06
/tmp/test04.txt.6.zz = 0.138320E-06
/tmp/test04.txt.7.atomic-bg = 0.338292E-06
/tmp/test04.txt.7.energie = 382.823
/tmp/test04.txt.7.fine-struct = 0.163722E-06
/tmp/test04.txt.7.index = 7
/tmp/test04.txt.7.ref = /tmp/test04.txt,7
/tmp/test04.txt.7.total = 3.502014E-06
/tmp/test04.txt.7.zz = 0.209645E-06
/tmp/test04.txt.8.atomic-bg = 0.510887E-06
/tmp/test04.txt.8.energie = 383.495
/tmp/test04.txt.8.fine-struct = 0.289162E-06
/tmp/test04.txt.8.index = 8
/tmp/test04.txt.8.ref = /tmp/test04.txt,8
/tmp/test04.txt.8.total = 3.800049E-06
/tmp/test04.txt.8.zz = 0.338610E-06
/tmp/test04.txt.indexes.count. = 8
datas.count = 224
files.count = 4
-
--reverse affichage
8
1:: 0.666035E-07 275.654 0.158487E-07 0.824522E-07 0.358381E-07 ::
2:: 0.808805E-07 277.222 0.208659E-07 0.101746E-06 0.437745E-07 ::
3:: 0.100600E-06 278.641 0.285866E-07 0.129187E-06 0.550289E-07 ::
4:: 0.128716E-06 279.910 0.409163E-07 0.169632E-06 0.715780E-07 ::
5:: 0.170319E-06 281.031 0.614717E-07 0.231790E-06 0.970176E-07 ::
6:: 0.234563E-06 282.001 0.974652E-07 0.332028E-06 0.138320E-06 ::
7:: 0.338292E-06 282.823 0.163722E-06 0.502014E-06 0.209645E-06 ::
8:: 0.510887E-06 283.495 0.289162E-06 0.800049E-06 0.338610E-06 ::
8
1:: 0.666035E-07 275.654 0.158487E-07 1.824522E-07 0.358381E-07 ::
2:: 0.808805E-07 277.222 0.208659E-07 1.101746E-06 0.437745E-07 ::
3:: 0.100600E-06 278.641 0.285866E-07 1.129187E-06 0.550289E-07 ::
4:: 0.128716E-06 279.910 0.409163E-07 1.169632E-06 0.715780E-07 ::
5:: 0.170319E-06 281.031 0.614717E-07 1.231790E-06 0.970176E-07 ::
6:: 0.234563E-06 282.001 0.974652E-07 1.332028E-06 0.138320E-06 ::
7:: 0.338292E-06 282.823 0.163722E-06 1.502014E-06 0.209645E-06 ::
8:: 0.510887E-06 283.495 0.289162E-06 1.800049E-06 0.338610E-06 ::
8
1:: 0.666035E-07 275.654 0.158487E-07 2.824522E-07 0.358381E-07 ::
2:: 0.808805E-07 277.222 0.208659E-07 2.101746E-06 0.437745E-07 ::
3:: 0.100600E-06 278.641 0.285866E-07 2.129187E-06 0.550289E-07 ::
4:: 0.128716E-06 279.910 0.409163E-07 2.169632E-06 0.715780E-07 ::
5:: 0.170319E-06 281.031 0.614717E-07 2.231790E-06 0.970176E-07 ::
6:: 0.234563E-06 282.001 0.974652E-07 2.332028E-06 0.138320E-06 ::
7:: 0.338292E-06 282.823 0.163722E-06 2.502014E-06 0.209645E-06 ::
8:: 0.510887E-06 283.495 0.289162E-06 2.800049E-06 0.338610E-06 ::
8
1:: 0.666035E-07 375.654 0.158487E-07 3.824522E-07 0.358381E-07 ::
2:: 0.808805E-07 377.222 0.208659E-07 3.101746E-06 0.437745E-07 ::
3:: 0.100600E-06 378.641 0.285866E-07 3.129187E-06 0.550289E-07 ::
4:: 0.128716E-06 379.910 0.409163E-07 3.169632E-06 0.715780E-07 ::
5:: 0.170319E-06 381.031 0.614717E-07 3.231790E-06 0.970176E-07 ::
6:: 0.234563E-06 382.001 0.974652E-07 3.332028E-06 0.138320E-06 ::
7:: 0.338292E-06 382.823 0.163722E-06 3.502014E-06 0.209645E-06 ::
8:: 0.510887E-06 383.495 0.289162E-06 3.800049E-06 0.338610E-06 ::
-
---recherche get(1 as index)
/tmp/test01.txt.1.atomic-bg = 0.666035E-07
/tmp/test01.txt.1.energie = 275.654
/tmp/test01.txt.1.fine-struct = 0.158487E-07
/tmp/test01.txt.1.index = 1
/tmp/test01.txt.1.ref = /tmp/test01.txt,1
/tmp/test01.txt.1.total = 0.824522E-07
/tmp/test01.txt.1.zz = 0.358381E-07
/tmp/test02.txt.1.atomic-bg = 0.666035E-07
/tmp/test02.txt.1.energie = 275.654
/tmp/test02.txt.1.fine-struct = 0.158487E-07
/tmp/test02.txt.1.index = 1
/tmp/test02.txt.1.ref = /tmp/test02.txt,1
/tmp/test02.txt.1.total = 1.824522E-07
/tmp/test02.txt.1.zz = 0.358381E-07
/tmp/test03.txt.1.atomic-bg = 0.666035E-07
/tmp/test03.txt.1.energie = 275.654
/tmp/test03.txt.1.fine-struct = 0.158487E-07
/tmp/test03.txt.1.index = 1
/tmp/test03.txt.1.ref = /tmp/test03.txt,1
/tmp/test03.txt.1.total = 2.824522E-07
/tmp/test03.txt.1.zz = 0.358381E-07
/tmp/test04.txt.1.atomic-bg = 0.666035E-07
/tmp/test04.txt.1.energie = 375.654
/tmp/test04.txt.1.fine-struct = 0.158487E-07
/tmp/test04.txt.1.index = 1
/tmp/test04.txt.1.ref = /tmp/test04.txt,1
/tmp/test04.txt.1.total = 3.824522E-07
/tmp/test04.txt.1.zz = 0.358381E-07
-
---get_data (3 as index, energie as field)
/tmp/test01.txt.3.energie = 278.641
/tmp/test02.txt.3.energie = 278.641
/tmp/test03.txt.3.energie = 278.641
/tmp/test04.txt.3.energie = 378.641
-
---get_data (6 as index, total as field)
/tmp/test01.txt.6.total = 0.332028E-06
/tmp/test02.txt.6.total = 1.332028E-06
/tmp/test03.txt.6.total = 2.332028E-06
/tmp/test04.txt.6.total = 3.332028E-06
-
---reverse get_data (6 as index, total as field)
0.332028E-06 1.332028E-06 2.332028E-06 3.332028E-06
/tmp/test01.txt.6.total /tmp/test02.txt.6.total /tmp/test03.txt.6.total /tmp/test04.txt.6.total facultatif
-
---sum_data (7 as index, total as field)
/tmp/test01.txt.7.total = 0.502014E-06
/tmp/test02.txt.7.total = 1.502014E-06
/tmp/test03.txt.7.total = 2.502014E-06
/tmp/test04.txt.7.total = 3.502014E-06
sum= 8.00806e-06
-
--mininum (8 as index, energie as field)
/tmp/test01.txt.8.energie = 283.495
/tmp/test02.txt.8.energie = 283.495
/tmp/test03.txt.8.energie = 283.495
/tmp/test04.txt.8.energie = 383.495
min= 283.495
/tmp/test01.txt.2.total = 0.101746E-06
/tmp/test02.txt.2.total = 1.101746E-06
/tmp/test03.txt.2.total = 2.101746E-06
/tmp/test04.txt.2.total = 3.101746E-06
min= 0.101746E-06
--maximum (8 as index, energie as field)
/tmp/test01.txt.8.energie = 283.495
/tmp/test02.txt.8.energie = 283.495
/tmp/test03.txt.8.energie = 283.495
/tmp/test04.txt.8.energie = 383.495
max= 383.495
/tmp/test01.txt.2.total = 0.101746E-06
/tmp/test02.txt.2.total = 1.101746E-06
/tmp/test03.txt.2.total = 2.101746E-06
/tmp/test04.txt.2.total = 3.101746E-06
max= 3.101746E-06
---get_all_filenames
/tmp/test01.txt
/tmp/test02.txt
/tmp/test03.txt
/tmp/test04.txt
nb files: 4
-
cat ~/scripts/atome1.awk (à adapter)
#!/bin/gawk
func aff(array){
PROCINFO["sorted_in"] = "@ind_str_asc"
for (i in array)
if(i~/count/){print i,"=",array[i][""][""]}
else{ for (j in array[i])
for (k in array[i][j])
if(!(k~/count/)){printf "%-30s = %s\n" , i"."j"."k , array[i][j][k]}else{print i,j"=",array[i][j][""]}
}
}
func aff_variante(array){
PROCINFO["sorted_in"] = "@ind_str_asc"
for (i in array){ nb=array[i]["indexes.count"][""]; print nb; for (j=1;j<=nb;j++)for (k in array[i][j])printf "%-30s = %s\n" , i "." j "." k , array[i][j][k] }
}
func get(array, ind){
for (i in array)if(!(i~/count/)){for (k in array[i][ind])printf "%-30s = %s\n", i "." ind "." k, array[i][ind][k]}
}
func get_data(array, ind, field) { for (i in array)if(!(i~/count/)){printf "%-30s = %s\n", i "." ind "." field, array[i][ind][field]}
}
func inv_get_data(array, ind, field) { for (i in array)if(!(i~/count/)){ printf "%-30s" , array[i][ind][field]}; print ""
for (i in array)if(!(i~/count/)){printf "%-30s", i "." ind "." field}; print "facultatif"; #facultatif
}
func inv_aff(array){
for (i in array){ nb=array[i]["indexes.count"][""]; print nb; {for (j=1;j<=nb;j++){ printf "%d:: ", j; for (k in array[i][j])if(!(k~/index|ref/))printf "%-20s", array[i][j][k]; print "::" }}}
}
func sum_data(array, ind, field) { sum=0; for (i in array)if(!(i~/count/)){ printf "%-30s = %s\n", i "." ind "." field, array[i][ind][field]; sum=sum+array[i][ind][field]}; print "sum=",sum
}
func minimum(array, ind, field) { min=1E32; for (i in array)if(!(i~/count/)){ printf "%-30s = %s\n", i "." ind "." field, array[i][ind][field]; if(min>array[i][ind][field])min=array[i][ind][field]}
print "min=",min
}
func maximum(array, ind, field) { max=-1E-32; for (i in array)if(!(i~/count/)){ printf "%-30s = %s\n", i "." ind "." field, array[i][ind][field]; if(max<array[i][ind][field])max=array[i][ind][field]}
print "max=",max
}
func get_all_filenames (array) { PROCINFO["sorted_in"] = "@ind_str_asc"; for (i in array)if(!(i~/count/))print i; print "nb files:",array["files.count"][""][""] }
BEGIN{count=0}
BEGINFILE{if(FILENAME){l=0; num_files++}}
$0~/^#/{l++}; !/#/{
count=count+7
ts[FILENAME][FNR-l]["index"]=FNR-l
ts[FILENAME][FNR-l]["ref"]=FILENAME","FNR-l
ts[FILENAME][FNR-l]["energie"]=$1
ts[FILENAME][FNR-l]["total"]=$2
ts[FILENAME][FNR-l]["atomic-bg"]=$3
ts[FILENAME][FNR-l]["fine-struct"]=$4
ts[FILENAME]["indexes.count"][""]=FNR-l
# etc ...
ts[FILENAME][FNR-l]["zz"]=$NF
}
END {
ts["datas.count"][""][""]=count
ts["files.count"][""][""]=num_files
print "--affichage"
aff(ts)
print "-"
print "--reverse affichage"
inv_aff(ts)
print "-"
print "---recherche get(1 as index)"
get(ts, 1)
print "-"
print "---get_data (3 as index, energie as field)"
get_data(ts, 3, "energie")
print "-"
print "---get_data (6 as index, total as field)"
get_data(ts, 6, "total")
print "-"
print "---reverse get_data (6 as index, total as field)"
inv_get_data(ts, 6, "total")
print "-"
print "---sum_data (7 as index, total as field)"
sum_data(ts, 7, "total")
print "-"
print "--mininum (8 as index, energie as field)"
minimum(ts, 8, "energie")
print ""
minimum(ts, 2, "total")
print ""
print "--maximum (8 as index, energie as field)"
maximum(ts, 8, "energie")
print ""
maximum(ts, 2, "total")
print ""
print "---get_all_filenames"
get_all_filenames(ts)
print "-"
}
Hors ligne