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 10/09/2019, à 10: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, à 10: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, à 10: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, à 10:33)

Hors ligne

#4 Le 10/09/2019, à 10: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, à 10: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, à 11: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, à 11:36

tenkaichi1995

Re : fusionner plusieurs colones de fichiers en un seul

ce sont des fichiers txt

Hors ligne

#8 Le 10/09/2019, à 12: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, à 18:03)

Hors ligne

#9 Le 10/09/2019, à 13: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, à 19:30)

Hors ligne

#10 Le 10/09/2019, à 15: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... hmm

KISS!
s'il y a des champs à traiter, on utilise awk.

Dernière modification par Watael (Le 10/09/2019, à 15:47)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 10/09/2019, à 18: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 roll

Dernière modification par kamaris (Le 10/09/2019, à 21:53)

Hors ligne

#12 Le 10/09/2019, à 21: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, à 09: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 […]

En ligne

#14 Le 11/09/2019, à 13: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, à 19: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