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 :

Shell : ajouter des espaces sur première ligne d'un fichier


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Shell : ajouter des espaces sur première ligne d'un fichier
    Bonjour,

    Longtemps que je n'ai plus mis les pieds ici, mais jamais oublié
    Je me heurtes à un mur, et ca fait mal :

    Nous générons quotidiennement un fichier (par un batch qui execute un prog cobol) : que nous appellerons toto.txt

    Le problème est que la première ligne, de longueur variable, doit contenir 500 caractères.
    Actuellement, ce traitement est fait manuellement : on rajoute des espaces à la fin de la première ligne jusqu'à arriver à 500 carac.

    Je souhaite automatiser ce traitement.

    Modifier le programme cobol n'est pas envisageable ( ), il me reste le shell (unix), que je ne connais que de surface.


    Mon idée était :
    1. Copier la première ligne du fichier toto.txt dans: toto_Ligne1.txt (avec sed)
    2. Supprimer la 1ère ligne de toto.txt
    3. Ajouter les espaces manquants à toto_ligne1.txt
    4. concatener les deux fichiers (dans le bon ordre )
    5. supprimer le fichier toto_ligne1.txt


    Or je ne vois pas comment ajouter les espaces.

    De même, j'ai lu que sed permettait d'éditer directement un fichier et si cela était possible, ce serait plus pratique.

    Bref, je suis un peu perdu

  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 Sed, c'est bien… comme disait la pub ;-)
    Salut,

    Le fichier d'origine avec un aperçu des fins de lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cat brol -A
    Mon idM-CM-)e M-CM-)tait :$
    1. Copier la premiM-CM-(re ligne du fichier toto.txt dans: toto_Ligne1.txt (avec sed)$
    2. Supprimer la 1M-CM-(re ligne de toto.txt$
    3. Ajouter les espaces manquants M-CM-  toto_ligne1.txt$
    4. concatener les deux fichiers (dans le bon ordre )$
    5. supprimer le fichier toto_ligne1.txt$
    Le nombre de caractère de la ligne la plus longue (la 2nd) :
    La moulinette sed (c'est raccord avec la pub), qui ajoute un espace en fin de ligne tant que la ligne ne fait pas 86 caractères. L'option -i.bak permet d'éditer le fichier en place et d'en faire une sauvegarde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sed -i.bak '1 {:z;s/^.\{1,85\}$/& /;tz}' brol
    On vérifie la longueur de la ligne la plus longue :
    On vérifie l'affichage des fins de lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ cat brol -A
    Mon idM-CM-)e M-CM-)tait :                                                                      $
    1. Copier la premiM-CM-(re ligne du fichier toto.txt dans: toto_Ligne1.txt (avec sed)$
    2. Supprimer la 1M-CM-(re ligne de toto.txt$
    3. Ajouter les espaces manquants M-CM-  toto_ligne1.txt$
    4. concatener les deux fichiers (dans le bon ordre )$
    5. supprimer le fichier toto_ligne1.txt$
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    Bonjour,

    en un peu plus laborieux :
    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
    $ cat fichier
    Mon idée était :
    1. Copier la première ligne du fichier toto.txt dans: toto_Ligne1.txt (avec sed)
    2. Supprimer la 1ère ligne de toto.txt
    3. Ajouter les espaces manquants à toto_ligne1.txt
    4. concatener les deux fichiers (dans le bon ordre )
    5. supprimer le fichier toto_ligne1.txt
    $ read line <fichier
    $ printf -v sp ' %.0s' $(seq 1 $((500-${#line})) )
    $ sed "1s/$line/$line$sp/" fichier | cat -A
    Mon idée était :                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    $
    1. Copier la première ligne du fichier toto.txt dans: toto_Ligne1.txt (avec sed)$
    2. Supprimer la 1ère ligne de toto.txt$
    3. Ajouter les espaces manquants à toto_ligne1.txt$
    4. concatener les deux fichiers (dans le bon ordre )$
    5. supprimer le fichier toto_ligne1.txt$
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup pour vos deux réponses!!!

    je vais expliquer ça à l'exploitation maintenant

    Bon week end!!

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

Discussions similaires

  1. Ajouter des espaces en fin de ligne.
    Par pressdell dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 11/10/2012, 12h57
  2. Réponses: 3
    Dernier message: 16/04/2011, 11h49
  3. Réponses: 13
    Dernier message: 11/11/2008, 13h45
  4. IE6 ajoute des espaces sur div float
    Par deejay2221 dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 15/08/2008, 11h25
  5. [VB.NET] DataGrid : titre des colonnes sur deux lignes
    Par Lahouari dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/12/2004, 14h44

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