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 :

Manipuler une zone numérique dans un fichier plat


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 25
    Points : 21
    Points
    21
    Par défaut Manipuler une zone numérique dans un fichier plat
    Bonjour,

    J'aurai besoin de votre expertise pour résoudre un ptit problème que je rencontre.

    Dans un fichier de type fichier plat, j'ai notamment deux zones numériques :
    Première zone : du caractère 158 au caractère 177
    Deuxième zone : du caractère 178 au caractère 191.

    Mon objectif : avoir un fichier à l'identique mais avec les 2 zones numériques divisées par deux.

    Je pense que l'opération n'est pas impossible avec sed ou awk mais je galère un peu.

    Merci d'avance à tous.
    Arnaud.

  2. #2
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Citation Envoyé par desbrandesq
    Dans un fichier de type fichier plat, j'ai notamment deux zones numériques :
    Première zone : du caractère 158 au caractère 177
    Deuxième zone : du caractère 178 au caractère 191.

    Mon objectif : avoir un fichier à l'identique mais avec les 2 zones numériques divisées par deux.

    Avec « awk »

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    awk '
    {
    	print "Avant : "
    	print $0
    	print "Apres : "
     	printf("%s%020d%013d%s\n",substr($0,1,157),substr($0,158,20)/2,substr($0,178,13)/2,substr($0,191))
    } '  test.txt


    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Avant :
    123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 000000000000000022220000000000444 3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
    Apres :
    123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 000000000000000011110000000000222 3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/03/2011, 13h38
  2. charger une table oracle dans un fichier plat
    Par simodsio dans le forum Langage SQL
    Réponses: 10
    Dernier message: 06/08/2008, 11h11
  3. Réponses: 3
    Dernier message: 05/08/2008, 16h58
  4. Charger une table oracle dans un fichier plat
    Par simodsio dans le forum PL/SQL
    Réponses: 5
    Dernier message: 04/08/2008, 16h19
  5. enlever la virgule dans une zone numérique
    Par davidzerbib dans le forum Access
    Réponses: 2
    Dernier message: 06/03/2007, 12h05

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