IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes POSIX Discussion :

Débordement taille maximum script ksh --> Alternative


Sujet :

Shell et commandes POSIX

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    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 éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Une solution à base de "sed". Attention codeur sensible s'abstenir, tarabiscotage en vue

    Le fichier d'entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Normalement ça devrait l'être

    Essaie en enlevant les espaces avant les "{" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par moctarim Voir le message
    Bonjour,

    Voici les formats de fichiers en entree et sortie.

    Avant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Normalement ça devrait l'être

    Essaie en enlevant les espaces avant les "{" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Le fichier avec d'autres champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Une solution plus simple utilisant awk:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Une solution plus simple utilisant awk:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

Discussions similaires

  1. taille maximum d'un div
    Par Anduriel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 13/05/2005, 21h32
  2. Execution d'un script ksh distant
    Par jool dans le forum C++
    Réponses: 2
    Dernier message: 18/03/2005, 10h10
  3. Script ksh - Valeur maximal d'un PID
    Par fidififouille dans le forum Linux
    Réponses: 7
    Dernier message: 09/08/2004, 10h10
  4. Taille maximum de tableau en Delphi
    Par yannick37 dans le forum Langage
    Réponses: 5
    Dernier message: 03/03/2004, 13h18
  5. [Tableau] taille maximum
    Par vasilov dans le forum C
    Réponses: 15
    Dernier message: 01/08/2003, 10h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo