Publicité
+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 27
  1. #1
    Membre à l'essai
    Inscrit en
    avril 2011
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 48
    Points : 21
    Points
    21

    Par défaut Débordement taille maximum script ksh --> Alternative

    Bonjour,

    Je dois faire la migration d'un script vba en shell unix.

    L'objectif est de construire un fichier csv à partir de données brutes.
    Dans ce fichier je dois remplir un champs (nombre de mouvements) en fonction du champ contrat.

    En gros le champ Nombre de mouvement est égal à 0 sauf s'il ya doublons de contrat ID et dans ce cas le dernier doublons prend la valeur 1 et les champs précèdents ont la valeur 0

    Exemple:
    Contrat;Nombre de mouvements
    12;1
    45;0
    45;1
    78;0
    78;0
    78;1
    52;1
    47;0
    47;1
    J'ai essayé de faire ça en shell avec un tableau mais j'ai des problèmes sur la limite du tableau 1024 alors que j'ai plus de 8000 lignes.

    Code :
    tab: subscript out of range
    Quelqu'un aurait il une idée sur comment je pourrai faire ca sans passer par les tableaux. Merci de votre aide

    Voici l'équivalence en vba


    Code :
    1
    2
    3
    4
    5
    6
     'Nombre de mouvements
        Nb_Colonnes = Nb_Colonnes + 1
        If (Donnees(Nb_Lignes, 2) = Donnees(Nb_Lignes - 1, 2) And Nb_Lignes > 2) Then
            Donnees(Nb_Lignes - 1, Nb_Colonnes) = 0
        ElseIf (Nb_Lignes > 2) Then
            Donnees(Nb_Lignes - 1, Nb_Colonnes) = 1

  2. #2
    Membre Expert
    Inscrit en
    avril 2008
    Messages
    981
    Détails du profil
    Informations forums :
    Inscription : avril 2008
    Messages : 981
    Points : 2 160
    Points
    2 160

    Par défaut

    Bonjour.

    Il semble que tu donnes un exemple du résultat attendu, mais il manque le format des données d'entrée. Peux-tu le fournir?

    Es-tu contraint à 'ksh'?
    Pour dépasser les limites, as-tu (peux-tu) essayé(er) avec 'bash'?
    Sinon, il y a aussi awk et sed... (mais ça dépend de l'input)

  3. #3
    Membre à l'essai
    Inscrit en
    avril 2011
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 48
    Points : 21
    Points
    21

    Par défaut

    Bonjour jack-ft,

    En entrée j'ai un fichier CSV avec différents champs délimités par un ;
    LE champ contrat représente le 1 er champ. En fonction de ce champ je dois remplir un autre champ (redondance ou pas).

    je ne suis pas contraint à ksh le bash m'irait bien aussi.

    En utilisant les tableaux j'ai le message d'erreur
    tab: subscript out of range --> limite tableau 1024.

  4. #4
    Expert Confirmé Sénior
    Profil pro
    Inscrit en
    janvier 2011
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : janvier 2011
    Messages : 1 706
    Points : 4 859
    Points
    4 859

    Par défaut

    Salut,
    Citation Envoyé par moctarim Voir le message
    En entrée j'ai un fichier CSV avec différents champs délimités par un ;
    LE champ contrat représente le 1 er champ. En fonction de ce champ je dois remplir un autre champ (redondance ou pas).
    C'est un exemple CONCRET qu'il nous faut de ton fichier AVANT => APRÈS.

    Merci.
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  5. #5
    Membre à l'essai
    Inscrit en
    avril 2011
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 48
    Points : 21
    Points
    21

    Par défaut

    Citation Envoyé par zipe31 Voir le message
    Salut,


    C'est un exemple CONCRET qu'il nous faut de ton fichier AVANT => APRÈS.

    Merci.

    Bonjour,

    Voici les formats de fichiers en entree et sortie.

    Avant

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Contrat_id
    14
    78
    45
    45
    12
    12
    12
    49
    32
    32
    96
    72
    398
    398

    Après
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Contrat_id;Nombre de mouvement
    14;1
    78;1
    45;0
    45;1
    12;0
    12;0
    12;1
    49;1
    32;0
    32;1
    96;1
    72;1
    398;0
    398;1

  6. #6
    Expert Confirmé Sénior
    Profil pro
    Inscrit en
    janvier 2011
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : janvier 2011
    Messages : 1 706
    Points : 4 859
    Points
    4 859

    Par défaut

    Une solution à base de "sed". Attention codeur sensible s'abstenir, tarabiscotage en vue

    Le fichier d'entrée :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $ cat plop 
    Contrat_id
    14
    78
    45
    45
    12
    12
    12
    49
    32
    32
    96
    72
    398
    398
    Le fichier de script pour "sed" :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $ cat script_sed 
    1 {
    s/.*/&;Nombre de mouvement/
    b
    }
    $ {
    s/$/;1/
    }
    N
    /\([^\n]*\).*\n\1$/ {
    bz
    }
    /\([^\n]*\).*\n\1$/! {
    s/\n/;1&/
    P
    D
    }
    :z
    s/\n/;0&/
    P
    D
    Le résultat :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $ sed -f script_sed plop 
    Contrat_id;Nombre de mouvement
    14;1
    78;1
    45;0
    45;1
    12;0
    12;0
    12;1
    49;1
    32;0
    32;1
    96;1
    72;1
    398;0
    398;1
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  7. #7
    Membre à l'essai
    Inscrit en
    avril 2011
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 48
    Points : 21
    Points
    21

    Par défaut

    Citation Envoyé par zipe31 Voir le message
    Une solution à base de "sed". Attention codeur sensible s'abstenir, tarabiscotage en vue
    Mdr je n'ai vu que du feu lol


    Citation Envoyé par zipe31 Voir le message
    Le fichier de script pour "sed" :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $ cat script_sed 
    1 {
    s/.*/&;Nombre de mouvement/
    b
    }
    $ {
    s/$/;1/
    }
    N
    /\([^\n]*\).*\n\1$/ {
    bz
    }
    /\([^\n]*\).*\n\1$/! {
    s/\n/;1&/
    P
    D
    }
    :z
    s/\n/;0&/
    P
    D
    Malheureusement j'ai ce message d'erreur

    Code :
    sed: /\([^\n]*\).*\n\1$/! { is not a recognized function.
    Ma distribution linux est HP-AIX, j'imagine que ce n'est pas compatible.

  8. #8
    Expert Confirmé Sénior
    Profil pro
    Inscrit en
    janvier 2011
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : janvier 2011
    Messages : 1 706
    Points : 4 859
    Points
    4 859

    Par défaut

    Normalement ça devrait l'être

    Essaie en enlevant les espaces avant les "{" :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    1{
    s/.*/&;Nombre de mouvement/
    b
    }
    ${
    s/$/;1/
    }
    N
    /\([^\n]*\)\n\1$/{
    bz
    }
    /\([^\n]*\)\n\1$/!{
    s/\n/;1&/
    P
    D
    }
    :z
    s/\n/;0&/
    P
    D
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  9. #9
    Membre à l'essai
    Inscrit en
    avril 2011
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 48
    Points : 21
    Points
    21

    Par défaut

    Merci zipe31,

    Je vais tester demain matin.

    Vu la complexité du code (réservé que pour les experts je crois ) ca m'étonnerait que je puisse l'adapter à mon besoin précis.

    Mon cas réel:
    Jai un fichier csv result.csv avec différents champs séparés par des ;
    Ex
    Contrat;xxxx;xxxxxxx;xxxxx;xxxxx;xxxxxx

    Je fais une boucle

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for ligne in $(cat result.csv)
     
    do
    Contrat=$(echo $ligne | awk -F";" '{print $1}')
    Nombre_Mouvements=.....0 ou 1 en fonction des redondances. (la valeur recherchée)
     
    echo "$Contrat;$Nombre_Mouvements" >> Fichier_Final.csv
     
     
    ...
    ....
    done
    Faut il passer par 2 scripts séparés (cest à dire recupérer tous les contrats dans un fichier séparer, ensuite faire appel au script et puis recupérer la veleur du nombre de mouvements)ou est il possible de recupérer directement la valeur Nombre_Mouvements dans la boucle for sans passer par les tableaux.

    Merci beaucoup

  10. #10
    Membre Expert
    Inscrit en
    avril 2008
    Messages
    981
    Détails du profil
    Informations forums :
    Inscription : avril 2008
    Messages : 981
    Points : 2 160
    Points
    2 160

    Par défaut

    Citation Envoyé par moctarim Voir le message
    Bonjour,

    Voici les formats de fichiers en entree et sortie.

    Avant

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Contrat_id
    14
    78
    45
    45
    12
    12
    12
    49
    32
    32
    96
    72
    398
    398

    Après
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Contrat_id;Nombre de mouvement
    14;1
    78;1
    45;0
    45;1
    12;0
    12;0
    12;1
    49;1
    32;0
    32;1
    96;1
    72;1
    398;0
    398;1
    Il semble que le fichier soit déjà trié sur le premier champ.
    Du coup, je pense qu'on doit pouvoir obtenir, avec awk, une solution lisible (donc adaptable)...

  11. #11
    Membre à l'essai
    Inscrit en
    avril 2011
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 48
    Points : 21
    Points
    21

    Par défaut

    Citation Envoyé par jack-ft Voir le message
    Il semble que le fichier soit déjà trié sur le premier champ.
    Du coup, je pense qu'on doit pouvoir obtenir, avec awk, une solution lisible (donc adaptable)...
    Oui en effet le fichier est déjà trié sur le premier champ.

    Une solution sur awk serait la bienvenue : lol:

    merci

  12. #12
    Membre à l'essai
    Inscrit en
    avril 2011
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 48
    Points : 21
    Points
    21

    Par défaut

    Citation Envoyé par zipe31 Voir le message
    Normalement ça devrait l'être

    Essaie en enlevant les espaces avant les "{" :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    1{
    s/.*/&;Nombre de mouvement/
    b
    }
    ${
    s/$/;1/
    }
    N
    /\([^\n]*\)\n\1$/{
    bz
    }
    /\([^\n]*\)\n\1$/!{
    s/\n/;1&/
    P
    D
    }
    :z
    s/\n/;0&/
    P
    D
    Exactement ca marche bien en enlevant les espaces avant les "{".
    Maintenant le problème réside dans la façon de l'adapter à mon programme

  13. #13
    Expert Confirmé Sénior
    Profil pro
    Inscrit en
    janvier 2011
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : janvier 2011
    Messages : 1 706
    Points : 4 859
    Points
    4 859

    Par défaut

    Le fichier avec d'autres champs :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $ cat plop 
    Contrat_id;xx;xxx;xxxxxxx;xx;x
    14;xx;xxx;xxxxxxx;xx;x
    78;xx;xxx;xxxxxxx;xx;x
    45;xx;xxx;xxxxxxx;xx;x
    45;xx;xxx;xxxxxxx;xx;x
    12;xx;xxx;xxxxxxx;xx;x
    12;xx;xxx;xxxxxxx;xx;x
    12;xx;xxx;xxxxxxx;xx;x
    49;xx;xxx;xxxxxxx;xx;x
    32;xx;xxx;xxxxxxx;xx;x
    32;xx;xxx;xxxxxxx;xx;x
    96;xx;xxx;xxxxxxx;xx;x
    72;xx;xxx;xxxxxxx;xx;x
    398;xx;xxx;xxxxxxx;xx;x
    398;xx;xxx;xxxxxxx;xx;x
    Le fichier de script "sed" réadapté :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $ cat script_sed 
    1{
    s/$/;Nombre de mouvement/
    b
    }
    ${
    s/$/;1/
    }
    N
    /^\([^;]*;\).*\n\1/{
    bz
    }
    /^\([^;]*;\).*\n\1/!{
    s/\n/;1&/
    P
    D
    }
    :z
    s/\n/;0&/
    P
    D
    Le résultat :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $ sed -f script_sed plop 
    Contrat_id;xx;xxx;xxxxxxx;xx;x;Nombre de mouvement
    14;xx;xxx;xxxxxxx;xx;x;1
    78;xx;xxx;xxxxxxx;xx;x;1
    45;xx;xxx;xxxxxxx;xx;x;0
    45;xx;xxx;xxxxxxx;xx;x;1
    12;xx;xxx;xxxxxxx;xx;x;0
    12;xx;xxx;xxxxxxx;xx;x;0
    12;xx;xxx;xxxxxxx;xx;x;1
    49;xx;xxx;xxxxxxx;xx;x;1
    32;xx;xxx;xxxxxxx;xx;x;0
    32;xx;xxx;xxxxxxx;xx;x;1
    96;xx;xxx;xxxxxxx;xx;x;1
    72;xx;xxx;xxxxxxx;xx;x;1
    398;xx;xxx;xxxxxxx;xx;x;0
    398;xx;xxx;xxxxxxx;xx;x;1
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  14. #14
    Modérateur
    Avatar de jlliagre
    Profil pro
    Inscrit en
    juin 2007
    Messages
    1 534
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : juin 2007
    Messages : 1 534
    Points : 2 882
    Points
    2 882

    Par défaut

    Une solution plus simple utilisant awk:

    Code :
    1
    2
    3
    4
    awk -F";" '
    BEGIN {p=""}
    /Contrat/ {printf("%s;Nombre de mouvements\n",$0);next;}
    {printf("%s;%d\n",o,$1==p?0:1);o=$0; p=$1}'
    ɹǝsn *sıɹɐlos*

  15. #15
    Expert Confirmé Sénior
    Profil pro
    Inscrit en
    janvier 2011
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : janvier 2011
    Messages : 1 706
    Points : 4 859
    Points
    4 859

    Par défaut

    Citation Envoyé par jlliagre Voir le message
    Une solution plus simple utilisant awk:

    Code :
    1
    2
    3
    4
    awk -F";" '
    BEGIN {p=""}
    /Contrat/ {printf("%s;Nombre de mouvements\n",$0);next;}
    {printf("%s;%d\n",o,$1==p?0:1);o=$0; p=$1}'
    La dernière ligne n'est pas prise en compte
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  16. #16
    Modérateur
    Avatar de jlliagre
    Profil pro
    Inscrit en
    juin 2007
    Messages
    1 534
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : juin 2007
    Messages : 1 534
    Points : 2 882
    Points
    2 882

    Par défaut

    Citation Envoyé par zipe31 Voir le message
    La dernière ligne n'est pas prise en compte
    Bien vu. Elle doit l'être maintenant:
    Code :
    1
    2
    3
    4
    5
    awk -F";" '
    BEGIN {p1=""}
    /Contrat/ {printf("%s;Nombre de mouvements\n",$0);next;}
    {printf("%s;%d\n",ol,$1==p1?0:1);ol=$0; p1=$1}
    END {printf("%s;1\n",ol);}'
    ɹǝsn *sıɹɐlos*

  17. #17
    Expert Confirmé Sénior
    Profil pro
    Inscrit en
    janvier 2011
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : janvier 2011
    Messages : 1 706
    Points : 4 859
    Points
    4 859

    Par défaut

    Citation Envoyé par jlliagre Voir le message
    Bien vu. Elle doit l'être maintenant:
    Yes, merci
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  18. #18
    Membre à l'essai
    Inscrit en
    avril 2011
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 48
    Points : 21
    Points
    21

    Par défaut

    Je l'ai testé avec mon cas ca ne semble pas fonctionne.

    Désolé je pense que je me suis mal exprimé sur mon cas réel.

    Voici les inputs et outputs souhaités

    Entrée

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Champ1;Contrat_ID;Champ3;Champ4;Champ5;Champ6;Champ7;Champ8;Champ9;Champ10;Champ11;Champ12;Champ13;Nombre_Mouvements;Champ15;Champ16;Champ17;champ18
    xxxxxxxxxx;33;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;34;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;34;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;36;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;68;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0



    Sortie actuelle avec le script ci dessus

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Champ1;Contrat_ID;Champ3;Champ4;Champ5;Champ6;Champ7;Champ8;Champ9;Champ10;Champ11;Champ12;Champ13;Nombre_Mouvements;Champ15;Champ16;Champ17;Champ18
    xxxxxxxxxx;33;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;34;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;34;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;36;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    xxxxxxxxxx;68;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;;0;0;0;0
    Sortie réellement souhaitée

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Champ1;Contrat_ID;Champ3;Champ4;Champ5;Champ6;Champ7;Champ8;Champ9;Champ10;Champ11;Champ12;Champ13;Nombre_Mouvements;Champ15;Champ16;Champ17;Champ18
    xxxxxxxxxx;33;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;1;0;0;0;0
    xxxxxxxxxx;34;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;0;0;0;0;0
    xxxxxxxxxx;34;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;1;0;0;0;0
    xxxxxxxxxx;36;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;1;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;0;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;0;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;0;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;1;0;0;0;0
    xxxxxxxxxx;68;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;1;0;0;0;0
    Merci beaucoup de votre aide.

  19. #19
    Modérateur
    Avatar de jlliagre
    Profil pro
    Inscrit en
    juin 2007
    Messages
    1 534
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : juin 2007
    Messages : 1 534
    Points : 2 882
    Points
    2 882

    Par défaut

    Code :
    1
    2
    3
    4
    5
    awk -F";" '
    BEGIN {p1="";OFS=";"}
    /Contrat/ {$14="Nombre de mouvements";print;next;}
    {printf(n=($2==p1)?0:1);ol=$0;p1=$2;$14=n;print}
    END {$14=1;print}'
    ɹǝsn *sıɹɐlos*

  20. #20
    Membre à l'essai
    Inscrit en
    avril 2011
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : avril 2011
    Messages : 48
    Points : 21
    Points
    21

    Par défaut

    La solution semble bien marcher sauf qu'en cas de redondance le champ Nombre de mouvement des premiers champs est égal à 0 il n' y a que le dernier qui prend 1.

    J'ai l'impression que dans le script c'est plutôt l'inverse:

    La première ligne prend 1 et la seconde prend 0.

    Exemple:

    Code :
    1
    2
    xxxxxxxxxx;34;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;0;0;0;0;0
    xxxxxxxxxx;34;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;1;0;0;0;0
    ou

    Code :
    1
    2
    3
    4
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;0;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;0;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;0;0;0;0;0
    xxxxxxxxxx;42;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;xxxxxxxxxx;1;1;0;0;0;0

    Je vous remercie déjà beaucoup !

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •