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 GNU Discussion :

Récupération d'info dans un fichier txt + traitements


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Récupération d'info dans un fichier txt + traitements
    Bonjour a tous,

    Je me permets de solliciter un peu d'aide car je suis un peu perdu ...

    Alors voila je dois faire un script qui récupère un fichier texte sur un serveur ftp d'un AS/400 et ensuite je dois traiter ce fichier ligne par ligne pour faire des vérification sur des mots précis et les placé dans des variables (de façon a alimenté une interface de supervision )

    - Récupération du fichier sur l'AS/400 + Conversion au format linux : ok
    - Alimenté l'interface de supervision : ok

    - lire le fichier ligne par ligne et afficher le contenu via "while read line ; do echo -e $line done < fic.txt : ok

    Par contre je n'arrive pas a faire des cut c1-9 et donc je n'arrive pas à faire de traitement sur ces lignes.


    Si quelqu'un a une idée ...
    NB: Je commence seulement à apprendre ^^

  2. #2
    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,

    Montres-nous plutôt à quoi ressemblent ces lignes et ce que tu veux récupérer exactement...
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Alors voila à quoi ressemblent en gros les lignes.
    A savoir que chaque argument de la ligne est positionné sur un certain nombre d'octets et qu'il n'y a aucun délimiteur et que par conséquent le champ "actif" peut se transformer en "inactif mais ok"
    Donc j'aimerais "découper" la ligne selon un certain nombre d'octets pour les placer dans des variables sur lesquelles je ferais des comparaisons ensuite.


    RAZ01  ABC  CFTLOG1                Actif                                                                                                                                                            09/04/11  23:15:1900
    RAZ01  BCD  CFTMAIN1               Actif                                                                                                                                                            09/04/11  23:19:1800
    RAZ02  JOB  CFTTCOM1               Actif                                                                                                                                                            09/04/11  23:15:2700
    RAZ02  JOB  CFTTFIL1               Actif                                                                                                                                                            09/04/11  23:19:3100
    TOR01  JOB  CFTTPRO1               Actif                                                                                                                                                            09/04/11  23:19:1800
    TOR02  JJQ  S_SCNCSV1              Actif                                                                                                                                                            03/01/12  20:00:0000
    Bon ici tout est séparé par un simple espace mais la ligne fait dans les 248 octets avant un retour a la ligne.
    Chaque ligne comporte 8 champs délimités par un nombre d'octets standard.

  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
    Citation Envoyé par Bhaalou Voir le message
    et qu'il y a aucun délimiteur
    Euh... et les espaces ce n'est pas un séparateur ?

    et que par conséquent le champ "actif" peut ce transformer en "inactif mais ok"
    Et ça a son importance ou pas ?

    Donc j'aimerais "decouper" la ligne selon un certain nombre d'octet pour les placer dans des variables sur lequelles je ferais des comparaison ensuite.
    Ça ne nous dit toujours pas ce que tu veux récupérer exactement ?
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    "Euh... et les espaces ce n'est pas un séparateur ?"

    Bien sur que oui, mais le champ 4 peut contenir une phrase avec plusieurs espace.

    "Et ça a son importance ou pas ?"

    Oui car je peux avoir une phrase de 160 caractères.

    "Ça ne nous dit toujours pas ce que tu veux récupérer exactement ?"

    J'aimerais récupérais les 8 champs dans des variables de façon a pouvoir faire des traitements et selon leurs états.

    Merci pour ton intérêt a mon soucis

  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
    On peut avoir un exemple CONCRET s'il te plaît ?

    Et si possible placé dans une balise "code" (le dièse (#) dans l'éditeur de texte) afin d'avoir tous les caractères), ou en pièce jointe à la limite
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Pour le moment voila ce que j'essaye de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while read line ; do
     
    C1= cut -c 1-9
    C2= cut -c 10-14
    ...
    ...
     
    echo "$C1"
    echo "$C2"
    ...
    ...
     
    done < fichier.txt
    Mais seul le echo "$C1" s'affiche ....
    Donc je n'arrives pas a mettre les autres champs dans des variables pour faire des traitement via "if" ... sniff

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Étonnant que echo "$C1" t'affiche un résultat cohérent...

    Pour découper ta ligne dans des variables, tu peux faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C1=$(echo ${line} | cut -c 1-9)
    C2=$(echo ${line} | cut -c 10-14)
    Si tu débutes, prends l'habitude d'encadrer tes noms de variables d'accolades. Sinon tu peux avoir des surprises...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    C="A"; C1="B"
    echo $C1   # affiche A1
    echo ${C1} # affiche B
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    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
    Tu dois pouvoir faire avec l'expansion des paramètres...

    Voici un exemple avec la 1ère ligne de ton fichier que j'ai mise dans la variable "${A}" :

    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
    22
    23
    24
    25
    # Pour l'affichage je remplace les espaces par des tirets pour une meilleure lisibilité
    $ echo "${A// /-}"
    RAZ01--ABC--CFTLOG1----------------Actif------------------------------------------------------------------------------------------------------------------------------------------------------------09/04/11--23:15:1900
     
    # Affichage du nombre de caractères (octets)
    $ echo "${#A}"
    216
     
    # Affichage des 5 premiers octets
    $ echo "${A::5}"
    RAZ01
     
    # Affichage du 13ème au 19ème caractère
    $ echo "${A:12:7}"
    CFTLOG1
     
    # Affichage du 197ème au 204ème caractère
    $ echo "${A:196:8}"
    09/04/11
     
    # Affichage des 10 derniers caractères
    $ echo "${A: -10}"
    23:15:1900
     
    $
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup !!

    Mais helas j'ai encore un petit probléme avec le code suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while read line ; do
     
    C1=$(echo ${line} | cut -c 1-9)
    C2=$(echo ${line} | cut -c 10-14)
    ...
    ...
     
    echo ${C1}
    echo ${C2}
    ...
    ...
     
    done < fichier.txt
    Il ne prend pas en compte les espace :/

    Mais au moment ou j’écris ces ligne je viens d'avoir l’idée d’écrire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while read line ; do
     
    C1=$(echo "${line}" | cut -c 1-9)
    C2=$(echo "${line}" | cut -c 10-14)
    ...
    ...
     
    echo "${C1}"
    echo "${C2}"
    ...
    ...
     
    done < fichier.txt
    Et la je récupère bien exactement mes valeurs bon certe sous forme de chaines de caractères mais comme je ne fais pas de traitement arithmétique sur ces chaines mais juste de la comparaison sauf sur les 2 derniers octets... cela me semble bien non ?
    Je risque peut être d'avoir un problème sur les dates ?

    En tout cas merci vraiment pour ce coup de pousse !!

    PS: Je ne mets de suite mon poste en résolu des fois que je bloque encore sur des petit trucs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupération de chiffre dans un fichier txt
    Par chouchouilloux dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/02/2010, 16h08
  2. [MySQL] Récupération de chiffre dans un fichier txt
    Par chouchouilloux dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 26/02/2010, 15h29
  3. Récupérations d'infoS dans un fichier texte
    Par remsrock dans le forum C#
    Réponses: 8
    Dernier message: 01/07/2008, 18h38
  4. Réponses: 6
    Dernier message: 20/01/2008, 16h32
  5. Réponses: 4
    Dernier message: 08/04/2006, 09h10

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