Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

mise en forme d'un fichier

2 réponses
Avatar
gamotte
Bonjour,

J'ai un fichier de la forme :

V1 des trucs |
V2 des trucs | bloc 1
V3 des trucs |
--
V1 des trucs | bloc 2
V3 des trucs |
--
:
--
V2 des trucs | bloc k
V3 des trucs |

La propri=E9t=E9 importante est que la premi=E8re colonne du fichier
contient des
noms de variables Vi i=3D1,...,n et que le fichier est compos=E9 de
plusieurs
blocs. Chaque bloc contient des informations sur certaines des
variables mais
pas toutes. Par exemple, le bloc 2 de l'exemple ci-dessus ne contient
pas
d'info sur V2. Par contre les variables sont class=E9es par ordre
d'indice
croissant dans chaque bloc.
Ce que j'aimerais faire, c'est concatener horizontalement l'information
de
chaque variable. Pour cela, une =E9tape interm=E9diaire est de cr=E9er
dans chaque
bloc et pour chaque variable manquante, une ligne au bon endroit avec
juste le
nom de la variable. Pour le bloc 2, ca donne :

V1 des trucs
V2
V3 des trucs

et le fichier final aurait la forme

V1 des trucs | des trucs | |
V2 des trucs | | ... | des trucs
V3 des trucs | des trucs | | des trucs

mais je n'ai aucune id=E9e de quelle commande utiliser pour automatiser
la
cr=E9ation des lignes manquantes de chaque bloc

Merci

--=20
Yves

2 réponses

Avatar
Pascal Bourguignon
writes:

Bonjour,

J'ai un fichier de la forme :

V1 des trucs |
V2 des trucs | bloc 1
V3 des trucs |
--
V1 des trucs | bloc 2
V3 des trucs |
--
:
--
V2 des trucs | bloc k
V3 des trucs |

La propriété importante est que la première colonne du fichier
contient des
noms de variables Vi i=1,...,n et que le fichier est composé de
plusieurs
blocs. Chaque bloc contient des informations sur certaines des
variables mais
pas toutes. Par exemple, le bloc 2 de l'exemple ci-dessus ne contient
pas
d'info sur V2. Par contre les variables sont classées par ordre
d'indice
croissant dans chaque bloc.
Ce que j'aimerais faire, c'est concatener horizontalement l'information
de
chaque variable. Pour cela, une étape intermédiaire est de créer
dans chaque
bloc et pour chaque variable manquante, une ligne au bon endroit avec
juste le
nom de la variable. Pour le bloc 2, ca donne :

V1 des trucs
V2
V3 des trucs

et le fichier final aurait la forme

V1 des trucs | des trucs | |
V2 des trucs | | ... | des trucs
V3 des trucs | des trucs | | des trucs

mais je n'ai aucune idée de quelle commande utiliser pour automatiser
la
création des lignes manquantes de chaque bloc


awk '
BEGIN{c=0;}
/^--$/{c++;next;}
{ v[$1]=$1; a[$1,c]=substr($0,1+length($1)); }
END{
for(i in v){
printf("%4s ",i);
for(j=0;j<=c;j++){ printf("%8s ",a[i,j]); }
printf("n"); }}' <<EOF
V1 one
V2 two
V3 three
--
V1 un
V2 deux
V4 quatre
--
V2 zwei
V3 drei
EOF

V1 one un
V2 two deux zwei
V3 three drei
V4 quatre

--
__Pascal Bourguignon__ http://www.informatimago.com/

NEW GRAND UNIFIED THEORY DISCLAIMER: The manufacturer may
technically be entitled to claim that this product is
ten-dimensional. However, the consumer is reminded that this
confers no legal rights above and beyond those applicable to
three-dimensional objects, since the seven new dimensions are
"rolled up" into such a small "area" that they cannot be
detected.

Avatar
Gamotte
Merci beaucoup