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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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.
gamotte@hotmail.com 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
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.
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
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.