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

AIX Discussion :

Unix/Aix : insérer un texte avec variable dans un fichier texte


Sujet :

AIX

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 21
    Points
    21
    Par défaut Unix/Aix : insérer un texte avec variable dans un fichier texte
    Bonjour aux cracks :

    J'essaie par une commande unix d'insérer dans un fichier texte sur la première ligne, à partir de la colonne 55 , un texte fixe et une variable d'un total de 8 caractères. Et le tout sans décaler le texte existant du fichier.

    Exemple: texte à insérer 'CA' , variable &Date = '062010'

    J'ai essayé avec la commande sed mais ne sais pas comment écrire la syntaxe pour positionner en colonne 55 de la première ligne.

    Avez-vous une solution ?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Pour simplifier , car apparemment il n'y a pas à ma connaissance d'amateur de commande Unix pour localiser les colonnes d'un fichier texte (ASCII), j'ai pu par un programme cobol inscrire en dur sur la première ligne en colonne 55 les caractères suivants : CAµµµµµ

    Maintenant, dans un script shell, par une commande Unix, il ne reste plus qu'à substituer 'µµµµµ' par la valeur date &date (MMSSAA).

    Et le souci et comment substituer une variable

    La commande sed : sed "s/µµµµµ/(/_$date)"
    ne passe pas

    Ni TR : tr "µµµµµ" $date

    Qlq'un aurait-il une meilleure interprétation ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 50
    Points : 59
    Points
    59
    Par défaut
    Je ne suis pas sûr d'avoir tout compris avec le passage par le cobol, mais ceci peut peut-être aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    export var=$(date +%Y-%m-%d)
    cat ./fichier_de_data | awk '{print substr($0,1,55)ENVIRON["var"]substr($0,56)}'
    Dans l'exemple ci-dessus, chaque ligne du fichier fichier_de_data est envoyé à awk, qui retourne, en les concaténant :
    - les caractères 1 à 55 inclus;
    - le contenu de la variable d'environnement var
    - les caractères 56 et suivants de la ligne.

    Note : il faut faire obligatoirement un export de var pour que awk puisse y accéder.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 92
    Points
    92
    Par défaut
    Tiens cela pourrait être aussi une solution en travaillant sur la première ligne comme vous l'avez dit :



    UN=$(head -1 MON_FICHIER | awk '{ for (i=1;i<=55;i++) printf ("%s ", $i )}' )

    VAR=$(date +%Y-%m-%d)

    DEUX=$(head -1 MON_FICHIER | awk '{ for (i=56;i<=NF;i++) printf ("%s ", $i )}' )

    echo $UN $VAR $DEUX

    voilà a toi de voir

    Cordialement

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Merci
    Enfin , j'avais procédé autrement avec la commande Sed, tout bête, mais ridicule, car je remplace des blancs par un texte.

    Alors votre solution avec un SUBTR n'est pas mal.

    Sur mon fichier texte, je veux en colonne 55 insérer un texte 'TOTO' , sans la valeur date pour tester la commande, donc :

    cat ./FICHIER | awk '{print substr($0,1,55) "TOTO"}' > FICTEST

    mais message d'erreur sur la commande CAT :
    cat: 0652-050 Cannot open ./FICHIER

    La commande écrite comme cela ne passe pas.

    Avez-vous la bonne syntaxe ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 50
    Points : 59
    Points
    59
    Par défaut
    hmmm dans le cas présent, ./FICHIER n'existe pas

    - soit il n'existe vraiment pas à l'emplacement spécifié
    - ou alors il a des caractères invisibles dans son nom.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Si, si, le fichier existe bien.
    la commande CAT ne doit probablement pas commencer comme ça...Je suis sous Unix Aix....?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Oui ça fonctionne maintenant, il fallait enlever le './' :

    cat /FICHIER.....

    Mais le fichier résultant FICTEST affiche bien 'TOTO' à la 55e colonne, mais a supprimé tout ce qui suit après laz 59e colonne .

    Il manque qlq chose après le AWK....

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 50
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par ventures Voir le message
    Oui ça fonctionne maintenant, il fallait enlever le './' :

    cat /FICHIER.....

    Mais le fichier résultant FICTEST affiche bien 'TOTO' à la 55e colonne, mais a supprimé tout ce qui suit après laz 59e colonne .

    Il manque qlq chose après le AWK....
    Il faut rajouter un substr pour lui dire d'afficher le reste de la ligne ...

    soit :

    cat /FICHIER | awk '{print substr($0,1,55)"TOTO"substr($0,56)}'

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    OK, c'est mieux
    Mais cette fois-ci , ça a décalé la suite de 4 espaces après "TOTO" à partir de la 59e colonne, car l'écriture de 'TOTO' est en insertion de 4 colonnes.

    Il y a surement un moyen d'insérer sans décaler les colonnes...(?)

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/04/2015, 09h35
  2. texte avec variable dans messageBox
    Par luckyalan dans le forum Débuter
    Réponses: 15
    Dernier message: 29/01/2014, 23h08
  3. [XL-2003] Insérer une variable dans un fichier texte
    Par harisman87 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/07/2010, 10h01
  4. Réponses: 2
    Dernier message: 08/06/2006, 13h48
  5. Réponses: 9
    Dernier message: 22/05/2006, 12h21

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