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 :

Remplacer un champ d'une positionnée donnée


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 87
    Par défaut Remplacer un champ d'une positionnée donnée
    Bonjour,

    Je souhaite parcourir un fichier en shell sh ou ksh (peu importe) et pour une positionnée donnée, remplacer le champ à cette position par autre chose.
    Plus concrètement:
    Soit mon fichier $fic_prov avec des lignes du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ACC|168063100|168063100|1|1680631||0|0||19900101000000||7||250
    ABB|168063110|168063112|1|1680631001|1680631|1|0||20110118000000|
    Je souhaite donc que pour une ligne commençant par ABB, il me remplace le deuxième champs 168063110 ( le délimiteur étant | ) par <champ_2>10; où 10 représente les deux derniers caractères du champ 2 (168063110).

    Pour finir, je souhaite mettre le résultat final (fichier modifié) dans un autre fichier.

    Actuellement j'essaye un truc pas très potable qui me provoque une erreur.
    Voici un extrait du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    a=1
    for fic_prov in $Repertoire/type_fichier*
    do
     
    nom_fic=`basename $fic_prov .txt`_"$a"_"txt" 
     
    awk -F "|" '{ $2 = "<champ_2>substr($2,length("$2")-2,length("$2"))" ; print $0 > $nom_fic}' $fic_prov   
     
    a=a+1
     
    done
    Erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    awk: syntax error near line 1
    awk: bailing out near line 1
    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 375
    Par défaut
    Bonjour,

    As-tu eu une solution pour ta demande, si ce n'est pas le cas est-il possible de mettre un exemple du fichier résultant pour plus de clarté

    A+

  3. #3
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Par défaut
    Avec l'énoncé du problème, c'est bien plus simple que cela :

    traitement.awk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    BEGIN{
    FS="|"
    OFS="|"
     
    }
    {
    if ( $1 ~ /ABB/ ) $2="<champ_2>" gensub(/^.*(..)$/,"\\1","1",$2);
    print $0
    }
    fic_prov
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ACC|168063100|168063100|1|1680631||0|0||19900101000000||7||250
    ABB|168063110|168063112|1|1680631001|1680631|1|0||20110118000000|
    Et on applique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk -f traitement.awk fic_prov

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 375
    Par défaut
    Salut becket,

    Merci pour ta solution, mais je trouve pas clair l'énoncé quand on dit je remplace le 2eme champ par champ2 du 10 ou 10 ...... et qui représente les 2 derniers caractères du champ 2 heu désolé de dire ça mais pour moi c'est l'embrouille à mon avis ce serait bien de mettre soit un exemple du résultat du fichier en sortie et de faire une nouvelle explication du besoin mais ce n'est que mon avis

    Si tu veux expose ce que tu as compris STP et met un exemple du fichier en sortie

    Merci d'avance A+

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

Discussions similaires

  1. Recherche du nom d'un champs contenant une valeur donnée
    Par gliderman dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/11/2011, 09h18
  2. Remplacement d'un caractère à une position donnée
    Par erustika dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 24/10/2011, 16h35
  3. [AC-2002] remplacer un champ d'une table
    Par babycoca dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/11/2009, 09h18
  4. Remplacer un champs dans une requête
    Par Flo88 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 21/02/2008, 08h39
  5. Réponses: 1
    Dernier message: 04/04/2007, 08h44

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