Précédent   Forum du club des développeurs et IT Pro > Systèmes > Autres systèmes > Unix > Shell et commandes POSIX
Shell et commandes POSIX Vos questions sur l'utilisation des commandes shell sous Unix.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/01/2013, 11h29   #1
moctarim
Membre à l'essai
 
Inscription : avril 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 38
Points : 20
Points : 20
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

Citation:
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
moctarim est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/01/2013, 12h16   #2
jack-ft
Membre Expert
 
Inscription : avril 2008
Messages : 800
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 800
Points : 1 809
Points : 1 809
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)
jack-ft est déconnecté   Envoyer un message privé Réponse avec citation 40
Vieux 07/01/2013, 13h28   #3
moctarim
Membre à l'essai
 
Inscription : avril 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 38
Points : 20
Points : 20
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.
moctarim est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/01/2013, 15h16   #4
zipe31
Expert Confirmé Sénior
 
Inscription : janvier 2011
Messages : 1 453
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 1 453
Points : 4 445
Points : 4 445
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.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/01/2013, 15h39   #5
moctarim
Membre à l'essai
 
Inscription : avril 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 38
Points : 20
Points : 20
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
moctarim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 17h15   #6
zipe31
Expert Confirmé Sénior
 
Inscription : janvier 2011
Messages : 1 453
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 1 453
Points : 4 445
Points : 4 445
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.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 07/01/2013, 18h06   #7
moctarim
Membre à l'essai
 
Inscription : avril 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 38
Points : 20
Points : 20
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.
moctarim est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/01/2013, 18h45   #8
zipe31
Expert Confirmé Sénior
 
Inscription : janvier 2011
Messages : 1 453
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 1 453
Points : 4 445
Points : 4 445
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.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/01/2013, 20h44   #9
moctarim
Membre à l'essai
 
Inscription : avril 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 38
Points : 20
Points : 20
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
moctarim est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/01/2013, 22h58   #10
jack-ft
Membre Expert
 
Inscription : avril 2008
Messages : 800
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 800
Points : 1 809
Points : 1 809
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)...
jack-ft est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 07/01/2013, 23h02   #11
moctarim
Membre à l'essai
 
Inscription : avril 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 38
Points : 20
Points : 20
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
moctarim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 09h52   #12
moctarim
Membre à l'essai
 
Inscription : avril 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 38
Points : 20
Points : 20
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
moctarim est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/01/2013, 10h00   #13
zipe31
Expert Confirmé Sénior
 
Inscription : janvier 2011
Messages : 1 453
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 1 453
Points : 4 445
Points : 4 445
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.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 08/01/2013, 11h46   #14
jlliagre
Modérateur
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 1 111
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 1 111
Points : 1 862
Points : 1 862
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*
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 08/01/2013, 11h58   #15
zipe31
Expert Confirmé Sénior
 
Inscription : janvier 2011
Messages : 1 453
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 1 453
Points : 4 445
Points : 4 445
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.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/01/2013, 12h23   #16
jlliagre
Modérateur
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 1 111
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 1 111
Points : 1 862
Points : 1 862
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*
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/01/2013, 12h27   #17
zipe31
Expert Confirmé Sénior
 
Inscription : janvier 2011
Messages : 1 453
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 1 453
Points : 4 445
Points : 4 445
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.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/01/2013, 16h47   #18
moctarim
Membre à l'essai
 
Inscription : avril 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 38
Points : 20
Points : 20
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.
moctarim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 17h00   #19
jlliagre
Modérateur
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 1 111
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 1 111
Points : 1 862
Points : 1 862
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*
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 08/01/2013, 18h04   #20
moctarim
Membre à l'essai
 
Inscription : avril 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 38
Points : 20
Points : 20
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 !
moctarim est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h20.


 
 
 
 
Partenaires

Hébergement Web