
Envoyé par
Masakatto
Bonjour,
Mon entreprise m'a demandé de programmer en langage
UNIX un script à partir de la spécification détaillée ci dessous.
Ne connaissant pas très bien UNIX, pouvez vous me donner un coup de main ?
Merci d'avance.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| 2 sortes de fichier (.csv) en entrée :
Loc_S1_20070404.csv_20060405_220000
Loc_R1_20070411.csv_20060412_2200000
Loc_N1_20070406.csv_20060407_220000
Loc_........................
Fac_S1_20070408.csv_20060409_220000
Fac_R1_20070408.csv_20060409_220000
Fac_N1_20060408.csv_20060409_2200000
Fac_……………..
Structure de ces fichiers (.csv) (avec séparateur ‘ ; ‘) ;
xxxxxxxx;xxxxxxx;xx;xxxxxxx;xxx;01/04/2007;XXXXX;….. ;Z_1_S1; ……
xxxxxxxx;xxxxxxx;xx;xxxxxxx;xxx;01/04/2007;XXXXX;….. ;Z_1_S2; ……
xxxxxxxx;xxxxxxx;xx;xxxxxxx;xxx;01/04/2007;XXXXX;….. ;Z_1_S3; ……
Créer 2 scripts distincts (UNIX / AWK ?) :
1 script qui traite les fichiers Loc_*_2007*.csv_* :
Lire tous les fichiers Loc_*_2007*.csv_* du répertoire courant.
a) Sélection des lignes possédant en 6ème position ‘2007’ ET en 15ème position la chaîne ‘Z_1_S1 ’ ET en 20ème position la chaîne ‘ORIGINAL ’
Pour ces lignes sélectionnées, effectuer un comptage -> ORIGINAL = XXXX
b) Sélection des lignes possédant en 6ème position ‘2007 ’ ET en 15ème position la chaîne ‘Z_1_S1 ’ ET en 20ème position la chaîne ‘DUPLICATA ’.
Pour ces lignes sélectionnées, effectuer un comptage -> DUPLICAT 1 = XXXXX
1 script qui traite les fichiers Fac_*_2007*.csv_* :
Lire tous les fichiers Fac_*_2007*.csv_* du répertoire courant.
a) Sélection des lignes possédant en 6ème position ‘2007 ’ ET en 18ème position la chaîne ‘Z_1_S2 ’ ET en 20ème position la chaîne ‘ORIGINAL ’
Pour ces lignes sélectionnées, effectuer un comptage -> ORIGINAL = XXXX
b) Sélection des lignes possédant en 6ème position ‘2007 ’ ET en 18ème position la chaîne ‘Z_1_S2 ’ ET en 20ème position la chaîne ‘DUPLICATA ’
Pour ces lignes sélectionnées, effectuer un comptage -> DUPLICAT 1 = XXXXX
c) Sélection des lignes possédant en 6ème position ‘2007 ’ ET en 18ème position la chaîne ‘Z_1_S2 ’ ET en 20ème position la chaîne ‘DUPLICATA_GED ’
Pour ces lignes sélectionnées, effectuer un comptage -> DUPLICATA 2 = XXXXX |
Déjà on ne fera pas le script à ta place. Mais qu'entends-tu par "comptage" ? Un cumul des valeurs "XXXXX" ???
Déjà étant donné que pour chaque fichier les différentes recherches se ressemblent ben moi j'écrirais une fonction de recherche générique "renvoyer toutes les lignes contenant X, Y et Z" à laquelle je passerais les éléments de recherche en paramètre et qui m'afficherait en retour toutes les lignes correspondant. Il ne resterait ensuite qu'à filtrer ces lignes, extraire et cumuler les infos qui t'intéressent.
Sinon en fait la grande difficulté pour toi est d'extraire les champs. Donc voici pour extraire un champ X d'une info (le séparateur étant le point-virgule)
echo "$info" |cut -fX -d\;
Et pour récupérer ce même champ X dans une variable toto
toto=`echo "$info" |cut -fX -d\;`
Cours complet de shell Linux ici http://linux.developpez.com/cours/
Partager